Browse Source

make background transparent by default when rendering to PDF

This was already being done for wkhtmltoimage using almost the
same technique documented in [1], the same logic was applied at
both places. The hack to achieve this in QtWebKit was also reverted
as it is no longer required and results in more correct behavior.
Closes #2084.

[1] http://blog.qt.digia.com/blog/2009/06/30/transparent-qwebview-or-qwebpage/
Peter van der Tak 10 years ago
parent
commit
5f89404e4d
4 changed files with 8 additions and 2 deletions
  1. 1 0
      CHANGELOG.md
  2. 1 1
      qt
  3. 1 1
      src/lib/imageconverter.cc
  4. 5 0
      src/lib/pdfconverter.cc

+ 1 - 0
CHANGELOG.md

@@ -1,6 +1,7 @@
 v0.12.2.1 (unreleased)
 ----------------------
 * update OpenSSL to 1.0.1l
+* **#2084**: **[qt]** make background transparent by default when rendering to PDF
 * **#2142**: fix wkhtmltoimage ignoring --javascript-delay and --window-status
 * **#2151**: **[qt]** fix PDFs rendering without embedded fonts on 64-bit Cocoa build
 

+ 1 - 1
qt

@@ -1 +1 @@
-Subproject commit c74350c8907d0929a6936705e2932fff7252ecea
+Subproject commit 48e71c19c7fc67517fb3dca6d42eacb57341c9ba

+ 1 - 1
src/lib/imageconverter.cc

@@ -195,7 +195,7 @@ void ImageConverterPrivate::pagesLoaded(bool ok) {
 		e.setStyleProperty("background-color", "transparent");
 		e.setStyleProperty("background-image", "none");
 		QPalette pal = loaderObject->page.palette();
-		pal.setColor(QPalette::Base, QColor(Qt::transparent));
+		pal.setBrush(QPalette::Base, Qt::transparent);
 		loaderObject->page.setPalette(pal);
 	} else {
 		painter.fillRect(QRect(QPoint(0,0),loaderObject->page.viewportSize()), Qt::white);

+ 5 - 0
src/lib/pdfconverter.cc

@@ -883,6 +883,11 @@ void PdfConverterPrivate::beginPrintObject(PageObject & obj) {
 	currentObject = obj.number;
 
 	if (!obj.loaderObject || obj.loaderObject->skip) return;
+
+	QPalette pal = obj.loaderObject->page.palette();
+	pal.setBrush(QPalette::Base, Qt::transparent);
+	obj.loaderObject->page.setPalette(pal);
+
 	const settings::PdfObject & ps = obj.settings;
 	pageHasHeaderFooter = ps.header.line || ps.footer.line ||
 		!ps.header.left.isEmpty() || !ps.footer.left.isEmpty() ||