From 55230caba4866ee8219dcf5a419511169bc649c3 Mon Sep 17 00:00:00 2001 From: stncrn Date: Fri, 2 Feb 2018 15:34:24 +0100 Subject: [PATCH] Patching cover page for 0mm margins Patching cover page for 0mm margins. Original modification from https://github.com/andkorsh/wkhtmltopdf/commit/c09862d6878fcf2f5cd406b05651c5bb8420f375 altered following this comment : https://github.com/wkhtmltopdf/wkhtmltopdf/pull/3692#issuecomment-354955879 --- include/wkhtmltox/pdfsettings.hh | 2 ++ src/lib/pdfconverter.cc | 14 ++++++++++++++ src/lib/pdfsettings.cc | 2 ++ src/lib/pdfsettings.hh | 2 ++ src/pdf/pdfcommandlineparser.cc | 1 + 5 files changed, 21 insertions(+) diff --git a/include/wkhtmltox/pdfsettings.hh b/include/wkhtmltox/pdfsettings.hh index 718fbcdb8..3021bca7e 100644 --- a/include/wkhtmltox/pdfsettings.hh +++ b/include/wkhtmltox/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/lib/pdfconverter.cc b/src/lib/pdfconverter.cc index b06be3f44..5ddbc244b 100644 --- a/src/lib/pdfconverter.cc +++ b/src/lib/pdfconverter.cc @@ -991,10 +991,24 @@ 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 = webPrinter != 0 ? webPrinter->pageCount() : 0; diff --git a/src/lib/pdfsettings.cc b/src/lib/pdfsettings.cc index 90678de4b..fb51a89f5 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 718fbcdb8..3021bca7e 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 d9be0d7c6..f8a27cc24 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")) {