From 5485d1d059227f2b0b95aa4dc7a6a82fdba8dfa5 Mon Sep 17 00:00:00 2001 From: Iceway Zhang Date: Wed, 4 May 2022 11:24:38 +0800 Subject: [PATCH 1/2] remove margins for cover page. original patch is: https://github.com/wkhtmltopdf/wkhtmltopdf/pull/3692/commits/c09862d6878fcf2f5cd406b05651c5bb8420f375 and stncrn correct some incorrect changes and patch is: https://github.com/stncrn/wkhtmltopdf/commit/55230caba4866ee8219dcf5a419511169bc649c3 Signed-off-by: Iceway Zhang --- src/lib/pdfconverter.cc | 12 ++++++++++++ src/lib/pdfsettings.cc | 2 ++ src/lib/pdfsettings.hh | 2 ++ src/pdf/pdfcommandlineparser.cc | 1 + 4 files changed, 17 insertions(+) diff --git a/src/lib/pdfconverter.cc b/src/lib/pdfconverter.cc index b0e668339..5da645fa5 100644 --- a/src/lib/pdfconverter.cc +++ b/src/lib/pdfconverter.cc @@ -1002,10 +1002,22 @@ void PdfConverterPrivate::printDocument() { progressString = "Preparing"; emit out.progressChanged(0); + qreal leftMargin, topMargin, rightMargin, bottomMargin; + printer->getPageMargins(&leftMargin, &topMargin, &rightMargin, &bottomMargin, settings.margin.left.second); + for (int cc_=0; cc_ < cc; ++cc_) { pageNumber=1; for (int d=0; d < objects.size(); ++d) { + if (objects[d].settings.isCover) { + painter->save(); + painter->translate(-leftMargin * printer->width() / printer->widthMM(), -topMargin * printer->height() / printer->heightMM()); + printer->setPageMargins(0, 0, 0, 0, settings.margin.left.second); + } beginPrintObject(objects[d]); + if (objects[d].settings.isCover) { + printer->setPageMargins(leftMargin, topMargin, rightMargin, bottomMargin, settings.margin.left.second); + painter->restore(); + } // XXX: In some cases nothing gets loaded at all, // so we would get no webPrinter instance. int pageCount = objects[d].web_printer != 0 ? objects[d].web_printer->pageCount() : 0; diff --git a/src/lib/pdfsettings.cc b/src/lib/pdfsettings.cc index 6bad5d95f..c3bbad595 100644 --- a/src/lib/pdfsettings.cc +++ b/src/lib/pdfsettings.cc @@ -162,6 +162,7 @@ struct DLL_LOCAL ReflectImpl: public ReflectClass { WKHTMLTOPDF_REFLECT(includeInOutline); WKHTMLTOPDF_REFLECT(pagesCount); WKHTMLTOPDF_REFLECT(isTableOfContent); + WKHTMLTOPDF_REFLECT(isCover); WKHTMLTOPDF_REFLECT(tocXsl); } }; @@ -405,6 +406,7 @@ PdfObject::PdfObject(): includeInOutline(true), pagesCount(true), isTableOfContent(false), + isCover(false), tocXsl("") {}; QString PdfGlobal::get(const char * name) { diff --git a/src/lib/pdfsettings.hh b/src/lib/pdfsettings.hh index 2504d7431..0e12b70c5 100644 --- a/src/lib/pdfsettings.hh +++ b/src/lib/pdfsettings.hh @@ -202,6 +202,8 @@ struct DLL_PUBLIC PdfObject { bool isTableOfContent; + bool isCover; + QString tocXsl; QString get(const char * name); diff --git a/src/pdf/pdfcommandlineparser.cc b/src/pdf/pdfcommandlineparser.cc index 478dfdd6d..d43cb5033 100644 --- a/src/pdf/pdfcommandlineparser.cc +++ b/src/pdf/pdfcommandlineparser.cc @@ -178,6 +178,7 @@ void PdfCommandLineParser::parseArguments(int argc, const char ** argv, bool fro ps.header.line = ps.footer.line = false; ps.header.htmlUrl = ps.footer.htmlUrl = ""; ps.includeInOutline = false; + ps.isCover = true; continue; } else if (!strcmp(argv[arg],"toc")) { From 8c40d9adcde7b32a7b7706316f67ba6b4ce9c78c Mon Sep 17 00:00:00 2001 From: Iceway Zhang Date: Wed, 4 May 2022 19:46:54 +0800 Subject: [PATCH 2/2] fix previous "remove margins for cover page" does not works. Signed-off-by: Iceway Zhang --- src/lib/pdfconverter.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib/pdfconverter.cc b/src/lib/pdfconverter.cc index 5da645fa5..c54a75997 100644 --- a/src/lib/pdfconverter.cc +++ b/src/lib/pdfconverter.cc @@ -1012,6 +1012,15 @@ void PdfConverterPrivate::printDocument() { painter->save(); painter->translate(-leftMargin * printer->width() / printer->widthMM(), -topMargin * printer->height() / printer->heightMM()); printer->setPageMargins(0, 0, 0, 0, settings.margin.left.second); + if (objects[d].web_printer != 0) { + /* + * delete objects[d].web_printer here, then in beginPrintObject(objects[d]) will re-create + * a new web_printer to use printer as we changed page margins for cover page. + * otherwise, the change setPageMargins to 0 will not works. + */ + delete objects[d].web_printer; + objects[d].web_printer = 0; + } } beginPrintObject(objects[d]); if (objects[d].settings.isCover) {