Patch level : 10.0
Files correlati : 768 Ricompilazione Demo : [ ] Commento : Errore 0001657: Creazione pdf dalla stampa fattura , interlinea scorretta e campi sovrapposti git-svn-id: svn://10.65.10.50/trunk@20617 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d63de600f5
commit
c231e99439
@ -7,7 +7,7 @@ BEGIN
|
||||
PROMPT 1 0 "@bStampa su..."
|
||||
ITEM "0|Stampante"
|
||||
MESSAGE SHOW,1@|HIDE,2@
|
||||
ITEM "2|Visualizzazione"
|
||||
ITEM "2|Anteprima"
|
||||
MESSAGE SHOW,1@|HIDE,2@
|
||||
ITEM "1|File su disco"
|
||||
MESSAGE HIDE,1@|SHOW,2@
|
||||
@ -24,13 +24,13 @@ BEGIN
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
LIST MSK_PRINTERS 64
|
||||
LIST MSK_PRINTERS 63
|
||||
BEGIN
|
||||
PROMPT 1 4 "Stampante "
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING MSK_FILENAME 256 68
|
||||
STRING MSK_FILENAME 256 64
|
||||
BEGIN
|
||||
PROMPT 1 4 "File "
|
||||
CHECKTYPE REQUIRED
|
||||
|
@ -83,9 +83,9 @@ void advanced_draw_text_line(WINDOW w, const char* text, const RCT& r, char hali
|
||||
xvt_dwin_get_font_metrics(w, &leading, &ascent, &descent);
|
||||
switch (valign)
|
||||
{
|
||||
case 'C': y -= (dy - ascent)/2; break;
|
||||
case 'T': y = r.top + leading + ascent; break;
|
||||
default : y -= descent; break;
|
||||
case 'C': y -= (dy - ascent-descent)/2; break;
|
||||
case 'T': y = r.top + ascent; break;
|
||||
default : y -= descent+leading; break;
|
||||
}
|
||||
bool can_draw = true;
|
||||
RCT orig; xvt_dwin_get_clip(w, &orig);
|
||||
@ -423,8 +423,8 @@ void TPrint_preview_window::popup_menu(EVENT* ep)
|
||||
menu[2].tag = POPUP_NEXT; menu[2].text = (char*)TR("Avanti"); menu[2].enabled = _page < _book->pages();
|
||||
menu[3].tag = POPUP_LAST; menu[3].text = (char*)TR("Ultima"); menu[3].enabled = _page < _book->pages();
|
||||
menu[4].tag = -1; menu[4].separator = true;
|
||||
menu[5].tag = POPUP_ZOOMIN; menu[5].text = (char*)TR("Zoom +"); menu[5].enabled = _zoom < 300;
|
||||
menu[6].tag = POPUP_ZOOMOUT; menu[6].text = (char*)TR("Zoom -"); menu[6].enabled = _zoom > 35;
|
||||
menu[5].tag = POPUP_ZOOMIN; menu[5].text = (char*)TR("Zoom +"); menu[5].enabled = _zoom < SCREENDPI*4;
|
||||
menu[6].tag = POPUP_ZOOMOUT; menu[6].text = (char*)TR("Zoom -"); menu[6].enabled = _zoom > SCREENDPI/4;
|
||||
menu[7].tag = -1; menu[7].separator = true;
|
||||
menu[8].tag = POPUP_GRID; menu[8].text = (char*)TR("Griglia"); menu[8].enabled = true;
|
||||
menu[8].checkable = true; menu[8].checked = _grid;
|
||||
@ -537,8 +537,8 @@ long TPrint_preview_window::handler(WINDOW win, EVENT* ep)
|
||||
processed = _page < _book->pages();
|
||||
if (processed) _page = _book->pages();
|
||||
break;
|
||||
case POPUP_ZOOMIN : if (_zoom < 300) { _zoom += 10; update_scroll_range(); } break;
|
||||
case POPUP_ZOOMOUT: if (_zoom > 35) { _zoom -= 10; update_scroll_range(); } break;
|
||||
case POPUP_ZOOMIN : if (_zoom < SCREENDPI*4) { _zoom += SCREENDPI/8; update_scroll_range(); } break;
|
||||
case POPUP_ZOOMOUT: if (_zoom > SCREENDPI/4) { _zoom -= SCREENDPI/8; update_scroll_range(); } break;
|
||||
case POPUP_GRID : _grid = !_grid; break;
|
||||
default:processed = false; break;
|
||||
}
|
||||
@ -618,7 +618,7 @@ bool TPrint_preview_window::on_key(KEY k)
|
||||
TPrint_preview_window::TPrint_preview_window(int x, int y, int dx, int dy, WINDOW parent,
|
||||
TWindowed_field* owner, TBook* book)
|
||||
: TField_window(x, y, dx, dy, parent, owner), _book(book),
|
||||
_page(1), _zoom(100), _grid(false)
|
||||
_page(1), _zoom(SCREENDPI), _grid(false)
|
||||
{
|
||||
_pixmap = true;
|
||||
_grid = ini_get_bool(CONFIG_GUI, "Preview", "Grid");
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <report.h>
|
||||
#endif
|
||||
|
||||
enum {BOOKDPI = 720};
|
||||
enum { SCREENDPI = 96, BOOKDPI = 720};
|
||||
|
||||
class TBook : public TObject
|
||||
{
|
||||
|
@ -974,16 +974,9 @@ void xvt_dwin_draw_roundrect(WINDOW win, const RCT *rctp, int oval_width, int ov
|
||||
void xvt_dwin_draw_dotted_rect(WINDOW win, RCT *rctp)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
static int can_draw_dots = -1;
|
||||
if (can_draw_dots < 0)
|
||||
can_draw_dots = xvt_sys_get_os_version() >= XVT_WS_WIN_NT;
|
||||
if (can_draw_dots)
|
||||
{
|
||||
CAST_DC(win, dc);
|
||||
OsWin32_DrawDottedRect(dc.GetHDC(), rctp->left, rctp->top, rctp->right, rctp->bottom);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
CAST_DC(win, dc);
|
||||
OsWin32_DrawDottedRect(dc.GetHDC(), rctp->left, rctp->top, rctp->right, rctp->bottom);
|
||||
#else
|
||||
DRAW_CTOOLS dct;
|
||||
xvt_dwin_get_draw_ctools(win, &dct);
|
||||
|
||||
@ -1000,6 +993,7 @@ void xvt_dwin_draw_dotted_rect(WINDOW win, RCT *rctp)
|
||||
xvt_dwin_set_cbrush(win, &brush);
|
||||
xvt_dwin_draw_rect(win, rctp);
|
||||
xvt_dwin_set_draw_ctools(win, &dct);
|
||||
#endif
|
||||
}
|
||||
|
||||
void xvt_dwin_draw_set_pos(WINDOW win, PNT pnt)
|
||||
@ -1009,6 +1003,10 @@ void xvt_dwin_draw_set_pos(WINDOW win, PNT pnt)
|
||||
dc._pnt.y = pnt.v;
|
||||
}
|
||||
|
||||
// x refers to to the left of the text
|
||||
// y refers to the baseline of the text
|
||||
// s is the text
|
||||
// len is the klenght of the text (-1 stands for all the null terminated text)
|
||||
void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len)
|
||||
{
|
||||
if (s && *s && len != 0)
|
||||
@ -1023,28 +1021,28 @@ void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len)
|
||||
str.Truncate(len);
|
||||
wxDC& dc = tdc.GetDC(); // Prima getto il DC ...
|
||||
const int delta = tdc.GetFontDelta(); // ... poi faccio la GetFontDelta!
|
||||
#ifdef LINUX
|
||||
if (tdc._dct.opaque_text)
|
||||
{
|
||||
RCT back;
|
||||
back.left = x;
|
||||
back.right = x + xvt_dwin_get_text_width(win, str, -1);
|
||||
back.top = y - delta;
|
||||
back.bottom = y;
|
||||
CAST_COLOR(tdc._dct.back_color, brush_color);
|
||||
/*
|
||||
#ifndef NDEBUG
|
||||
// Disegna linee base del testo
|
||||
int width = ::xvt_dwin_get_text_width(win, s, len);
|
||||
int leading, ascent, descent; xvt_dwin_get_font_metrics(win, &leading, &ascent, &descent);
|
||||
|
||||
wxBrush* brush = wxTheBrushList->FindOrCreateBrush(brush_color, wxSOLID);
|
||||
const wxBrush & old_brush = dc.GetBrush();
|
||||
const wxPen & old_pen = dc.GetPen();
|
||||
const wxRect rct = RCT2Rect(&back);
|
||||
dc.SetPen(*wxMEDIUM_GREY_PEN);
|
||||
dc.DrawLine(x, y, x+width, y);
|
||||
|
||||
dc.SetBrush(*brush);
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.DrawRectangle(rct);
|
||||
dc.SetBrush(old_brush);
|
||||
dc.SetPen(old_pen);
|
||||
}
|
||||
#endif
|
||||
dc.SetPen(*wxCYAN_PEN);
|
||||
dc.DrawLine(x, y-ascent, x+width, y-ascent);
|
||||
|
||||
dc.SetPen(*wxGREEN_PEN);
|
||||
dc.DrawLine(x, y+descent, x+width, y+descent);
|
||||
|
||||
if (leading > 0)
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.DrawLine(x, y+descent+leading, x+width, y+descent+leading);
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
dc.DrawText(str, x, y-delta);
|
||||
}
|
||||
}
|
||||
@ -1075,13 +1073,13 @@ void xvt_dwin_get_font_metrics(WINDOW win, int *leadingp, int *ascentp, int *des
|
||||
{
|
||||
// Attenzione: non funziona la chiamate in cascata a xvt_font_get_metrics
|
||||
CAST_DC(win, dc);
|
||||
const wxString str = "Mg";
|
||||
const wxString str = "Kpfx";
|
||||
int height, desc, lead;
|
||||
dc.GetTextExtent(str, NULL, &height, &desc, &lead);
|
||||
if (leadingp)
|
||||
*leadingp = lead;
|
||||
if (ascentp)
|
||||
*ascentp = height-lead-desc;
|
||||
*ascentp = height-desc;
|
||||
if (descentp)
|
||||
*descentp = desc;
|
||||
}
|
||||
@ -1376,7 +1374,7 @@ void xvt_font_get_metrics(XVT_FNTID font_id, int *leadingp, int *ascentp, int *d
|
||||
win = TASK_WIN; // Non mi fido troppo della finestra su cui il font e' mappato
|
||||
CAST_DC(win, dc);
|
||||
|
||||
const wxString str = "Mq";
|
||||
const wxString str = "Kpfx";
|
||||
int height = 0, desc = 0, lead = 0;
|
||||
const wxFont& ff = font.Font(&dc, win);
|
||||
dc.GetTextExtent(str, NULL, &height, &desc, &lead, (wxFont*)&ff);
|
||||
@ -1390,7 +1388,7 @@ void xvt_font_get_metrics(XVT_FNTID font_id, int *leadingp, int *ascentp, int *d
|
||||
if (leadingp)
|
||||
*leadingp = lead;
|
||||
if (ascentp)
|
||||
*ascentp = height-desc-lead;
|
||||
*ascentp = height-desc; //*ascentp = height-desc-lead;
|
||||
if (descentp)
|
||||
*descentp = desc;
|
||||
}
|
||||
|
@ -111,6 +111,7 @@ XVTDLL void xvt_dwin_draw_gradient_circular(WINDOW win, const RCT* r, C
|
||||
XVTDLL void xvt_dwin_draw_gradient_linear(WINDOW win, const RCT* r, COLOR col1, COLOR col2, int angle); // Added by AGA
|
||||
XVTDLL void xvt_dwin_draw_image_on_pdf(WINDOW win, const char* name, RCT* dest); // Added by AGA
|
||||
XVTDLL void xvt_dwin_draw_image(WINDOW win, XVT_IMAGE image, const RCT* dest, const RCT* source);
|
||||
XVTDLL void xvt_dwin_draw_line(WINDOW win, PNT pnt);
|
||||
XVTDLL void xvt_dwin_draw_oval(WINDOW Win, const RCT* r);
|
||||
XVTDLL void xvt_dwin_draw_pie(WINDOW win, const RCT *rctp, int start_x, int start_y, int stop_x, int stop_y);
|
||||
XVTDLL void xvt_dwin_draw_polygon(WINDOW win, const PNT *lpnts, int npnts);
|
||||
@ -140,7 +141,6 @@ XVTDLL void xvt_dwin_set_font(WINDOW win, XVT_FNTID font_id);
|
||||
XVTDLL void xvt_dwin_set_fore_color(WINDOW win, COLOR color);
|
||||
XVTDLL void xvt_dwin_set_std_cbrush(WINDOW win, long flag);
|
||||
XVTDLL void xvt_dwin_set_std_cpen(WINDOW win, long flag);
|
||||
XVTDLL void xvt_dwin_draw_line(WINDOW win, PNT pnt);
|
||||
XVTDLL void xvt_dwin_update(WINDOW win);
|
||||
|
||||
XVTDLL XVT_ERRSEV xvt_errmsg_get_sev_id(XVT_ERRMSG err);
|
||||
|
@ -51,6 +51,27 @@ static int RoundToIcon(int nSize)
|
||||
return nSize;
|
||||
}
|
||||
|
||||
void Image2Colors(const wxImage& img, wxColour& mean, wxColour& dark, wxColour& light)
|
||||
{
|
||||
dark = *wxWHITE;
|
||||
mean = *wxLIGHT_GREY;
|
||||
light = *wxBLACK;
|
||||
double r=0, g=0, b=0;
|
||||
|
||||
const int h = img.GetHeight();
|
||||
for (int i = 0; i < h; i++)
|
||||
{
|
||||
const wxColourBase::ChannelType cr = img.GetRed(i,i);
|
||||
const wxColourBase::ChannelType cg = img.GetGreen(i,i);
|
||||
const wxColourBase::ChannelType cb = img.GetBlue(i,i);
|
||||
r += cr; g += cg; b += cb;
|
||||
}
|
||||
r/=h; g/=h; b/=h;
|
||||
mean = wxColour(r, g, b);
|
||||
dark = wxColour(r*0.8, g*0.8, b*0.8);
|
||||
light = wxColour(min(r*1.2,255), min(g*1.2,255), min(b*1.2,255));
|
||||
}
|
||||
|
||||
|
||||
static wxAuiDockArt* FindArtist(wxWindow* pWindow)
|
||||
{
|
||||
@ -2036,9 +2057,20 @@ void TwxToolBar::OnEraseBackground(wxEraseEvent& evt)
|
||||
}
|
||||
else
|
||||
{
|
||||
wxBrush brush(GetBackgroundColour());
|
||||
dc.SetBackground(brush);
|
||||
dc.Clear();
|
||||
if (xvt_sys_get_oem_int("OEM", -1) == 0)
|
||||
{
|
||||
wxCoord cw, ch; dc.GetSize(&cw, &ch);
|
||||
const wxColour b0 = GetBackgroundColour();
|
||||
const wxColour b1 = ModulateColour(b0, -10);
|
||||
const wxColour b2 = ModulateColour(b0, +70);
|
||||
dc.GradientFillLinear(wxRect(0,0,cw,ch),b1,b2,wxSOUTH);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxBrush brush(GetBackgroundColour());
|
||||
dc.SetBackground(brush);
|
||||
dc.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2059,25 +2091,11 @@ void TwxToolBar::SetBackgroundTexture(XVT_IMAGE xvt_img)
|
||||
if (xvt_img != NULL)
|
||||
{
|
||||
const wxImage& img = *(wxImage*)xvt_img;
|
||||
m_texture = wxBitmap(img);
|
||||
wxColour mean, dark, light;
|
||||
Image2Colors(img, mean, dark, light);
|
||||
SetBackgroundColour(mean);
|
||||
|
||||
wxImageHistogram histogram;
|
||||
if (img.ComputeHistogram(histogram))
|
||||
{
|
||||
unsigned long nModa = 0;
|
||||
wxColour cModa;
|
||||
for(wxImageHistogram::iterator it = histogram.begin(); it != histogram.end(); ++it)
|
||||
{
|
||||
const wxImageHistogramEntry& e = it->second;
|
||||
if (e.value > nModa)
|
||||
{
|
||||
cModa = it->first;
|
||||
nModa = e.value;
|
||||
}
|
||||
}
|
||||
if (nModa > 0)
|
||||
SetBackgroundColour(cModa);
|
||||
}
|
||||
m_texture = wxBitmap(img);
|
||||
}
|
||||
else
|
||||
m_texture = wxNullBitmap;
|
||||
|
@ -735,7 +735,7 @@ void TwxPDFDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
|
||||
|
||||
PDF_TRY_DL(m_PDFlib, m_p)
|
||||
{
|
||||
m_PDFlib->PDF_set_text_pos(m_p, x, y + m_fontsize);
|
||||
m_PDFlib->PDF_set_text_pos(m_p, x, y + m_ascent);
|
||||
m_PDFlib->PDF_show(m_p, text);
|
||||
wxCoord text_w = m_PDFlib->PDF_stringwidth(m_p, text, m_fontnr, m_fontsize);
|
||||
CalcBoundingBox( x, y );
|
||||
@ -805,8 +805,9 @@ void TwxPDFDC::DoGetTextExtent(const wxString& text,
|
||||
if (m_font.Ok() && (theFont==NULL || *theFont==m_font))
|
||||
{
|
||||
if (x) *x = m_PDFlib->PDF_stringwidth(m_p, text, m_fontnr, m_fontsize);
|
||||
if (y) *y = 5*m_fontsize/4;
|
||||
if (d) *d = m_fontsize/4;
|
||||
if (y) *y = m_fontsize;
|
||||
if (d) *d = m_descent;
|
||||
if (e) *e = m_leading;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -818,11 +819,11 @@ void TwxPDFDC::DoGetTextExtent(const wxString& text,
|
||||
double fontsize = theFont->GetPointSize();
|
||||
int fontnr = m_PDFlib->PDF_load_font(m_p, strFamily, 0, "auto", "fontstyle {" + strStyle + "}");
|
||||
if (x) *x = m_PDFlib->PDF_stringwidth(m_p, text, fontnr, fontsize);
|
||||
if (y) *y = 5*fontsize/4;
|
||||
if (d) *d = fontsize/4;
|
||||
if (y) *y = fontsize;
|
||||
if (d) *d = fontsize/5;
|
||||
if (e) *e = fontsize/10;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
PDF_CATCH_DL(m_PDFlib, m_p)
|
||||
{
|
||||
@ -905,6 +906,9 @@ void TwxPDFDC::SetFont( const wxFont& font )
|
||||
// molto molto minore di quello effettivo
|
||||
if (m_fontsize < 36)
|
||||
m_fontsize *= 9;
|
||||
m_descent = m_fontsize/5;
|
||||
m_ascent = m_fontsize-m_descent;
|
||||
m_leading = m_descent/2;
|
||||
|
||||
m_font = font;
|
||||
m_fontnr = m_PDFlib->PDF_load_font(m_p, strFamily, 0, "host", "");
|
||||
@ -1057,23 +1061,18 @@ void TwxPDFDC::SetBrush( const wxBrush& brush )
|
||||
}
|
||||
}
|
||||
|
||||
void TwxPDFDC::SetFontColor( const wxColor& color ) const
|
||||
void TwxPDFDC::SetFontColor( const wxColour& color ) const
|
||||
{
|
||||
wxCHECK_RET( m_ok, wxT("invalid PDF dc") );
|
||||
|
||||
if (!color.Ok())
|
||||
return;
|
||||
|
||||
unsigned char red = color.Red();
|
||||
unsigned char blue = color.Blue();
|
||||
unsigned char green = color.Green();
|
||||
|
||||
double redPDF = (double)(red) / 255.0;
|
||||
double bluePDF = (double)(blue) / 255.0;
|
||||
double greenPDF = (double)(green) / 255.0;
|
||||
|
||||
PDF_TRY_DL(m_PDFlib, m_p)
|
||||
{
|
||||
const double redPDF = color.Red() / 255.0;
|
||||
const double bluePDF = color.Blue() / 255.0;
|
||||
const double greenPDF = color.Green() / 255.0;
|
||||
m_PDFlib->PDF_setcolor(m_p, "fill", "rgb", redPDF, greenPDF, bluePDF, 0);
|
||||
}
|
||||
PDF_CATCH_DL(m_PDFlib, m_p)
|
||||
|
@ -119,7 +119,9 @@ protected:
|
||||
bool m_clipping;
|
||||
bool m_topDown;
|
||||
bool m_pageopen;
|
||||
double m_fontsize;
|
||||
|
||||
double m_fontsize; // m_ascent + m_descent
|
||||
double m_ascent, m_descent, m_leading;
|
||||
|
||||
wxString m_filenames[PDF_IMG_CACHE_SIZE];
|
||||
int m_handles[PDF_IMG_CACHE_SIZE];
|
||||
|
@ -337,9 +337,9 @@ wxDC& TDC::GetDC(bool bPaint)
|
||||
_dc->SetFont(f);
|
||||
_real_font = _font;
|
||||
|
||||
int height, desc, lead;
|
||||
_dc->GetTextExtent("Mg", NULL, &height, &desc, &lead);
|
||||
_deltaf = height-desc+1;
|
||||
int height, desc, lead;
|
||||
_dc->GetTextExtent("Kpfx", NULL, &height, &desc, &lead);
|
||||
_deltaf = height-desc; // Baseline offset from top
|
||||
}
|
||||
|
||||
if (_dirty < 0 || ClipChanged())
|
||||
|
Loading…
x
Reference in New Issue
Block a user