diff --git a/uppsrc/PdfDraw/PdfDraw.cpp b/uppsrc/PdfDraw/PdfDraw.cpp index 7b168a1f9..dff14d3c3 100644 --- a/uppsrc/PdfDraw/PdfDraw.cpp +++ b/uppsrc/PdfDraw/PdfDraw.cpp @@ -969,8 +969,8 @@ String PdfDraw::Finish(const PdfSignatureInfo *sign) int signature_widget = -1; int p7s_start, p7s_end, pdf_length_pos; - int sign_page = Null; - String sign_rect; + int sign_page = Null; + Rect sign_rect; if(sign) { signature = BeginObj(); @@ -1016,8 +1016,12 @@ String PdfDraw::Finish(const PdfSignatureInfo *sign) << Pt(u.rect.left) << ' ' << Pt(pgsz.cy - u.rect.bottom) << ' ' << Pt(u.rect.right) << ' ' << Pt(pgsz.cy - u.rect.top) << "]\n"; if(u.url == "<>") { - sign_page = pi; - sign_rect = r; + if(sign_page == pi) + sign_rect.Union(u.rect); + else { + sign_page = pi; + sign_rect = u.rect; + } } else { url_ann.At(pi) << ' ' << BeginObj() << " 0 R"; @@ -1045,7 +1049,10 @@ String PdfDraw::Finish(const PdfSignatureInfo *sign) sign_page = 0; } else - out << "/F 4 " << sign_rect; + out << "/F 4 /Border[0 0 0]/Rect[" + << Pt(sign_rect.left) << ' ' << Pt(pgsz.cy - sign_rect.bottom) << ' ' + << Pt(sign_rect.right) << ' ' << Pt(pgsz.cy - sign_rect.top) << "]\n"; + out << "/P " << signature_widget + 2 + sign_page << " 0 R\n" // next entry is Pages and then Page << ">>\n"; EndObj(); diff --git a/uppsrc/PdfDraw/PdfDraw.h b/uppsrc/PdfDraw/PdfDraw.h index 262e1411a..354009a4e 100644 --- a/uppsrc/PdfDraw/PdfDraw.h +++ b/uppsrc/PdfDraw/PdfDraw.h @@ -370,7 +370,8 @@ public: PdfDraw(Size pgsz = Size(5100, 6600), bool pdfa = false) { Init(pgsz.cx, pgsz.cy, 0, pdfa); } }; -String Pdf(const Array& report, Size pagesize, int margin, bool pdfa = false); +String Pdf(const Array& report, Size pagesize, int margin, bool pdfa = false, + const PdfSignatureInfo *sign = NULL); } diff --git a/uppsrc/Report/Report.h b/uppsrc/Report/Report.h index 32f532f28..a88ea97f9 100644 --- a/uppsrc/Report/Report.h +++ b/uppsrc/Report/Report.h @@ -151,7 +151,7 @@ public: ReportWindow(); }; -String Pdf(Report& report, bool pdfa = false); +String Pdf(Report& report, bool pdfa = false, const PdfSignatureInfo *sign = NULL); void Print(Report& r, PrinterJob& pd); bool DefaultPrint(Report& r, int i, const char *_name = t_("Report")); bool Print(Report& r, int i, const char *name = t_("Report")); diff --git a/uppsrc/Report/ReportDlg.cpp b/uppsrc/Report/ReportDlg.cpp index 61bb0c201..c0198c449 100644 --- a/uppsrc/Report/ReportDlg.cpp +++ b/uppsrc/Report/ReportDlg.cpp @@ -210,11 +210,11 @@ ReportWindow::ReportWindow() pdf <<= THISBACK(Pdf); } -String Pdf(Report& report, bool pdfa) +String Pdf(Report& report, bool pdfa, const PdfSignatureInfo *sgn) { return GetDrawingToPdfFn() && report.GetCount() ? (*GetDrawingToPdfFn())(report.GetPages(), report.GetPage(0).GetSize(), - Nvl(report.GetMargins().x, 200), pdfa) + Nvl(report.GetMargins().x, 200), pdfa, sgn) : String(); }