On 2022-04-07 20:28, Israel Brewster wrote:
Using Qt 5.15 and PySide2, I am working on a project that requires me to produce a PDF output. My process so far is to create a QWidget containing the content I want, render it to a QPicture (so it won’t be rasterized upon “printing”), then create a PDF QPrinter and use the painter.drawPicture() function to “print” the widget into a PDF.

This works well, giving me a high-quality vectorized PDF output, with one exception: any item that is filled with a gradient. When printing to PDF, the gradient always comes out as solid white. With some digging, I determined that this is even the case when doing nothing but a simple painter.fillRect() with a gradient.

Is there any “fix” for this? Thanks.

If it helps, here is some simple code that reproduces the issue:

from PySide2.QtWidgets import QApplication
from PySide2.QtGui import QPainter, QPageSize, QLinearGradient
from PySide2.QtPrintSupport import QPrinter
from PySide2.QtCore import QSize, QRect, Qt

app = QApplication()

gradient_rect = QRect(0, 0, 500, 25)
gradient = QLinearGradient(0, 0, 1, 0)
gradient.setColorAt(0, Qt.blue)
gradient.setColorAt(1, Qt.red)

page_size = QPageSize(QSize(500, 25), matchPolicy = QPageSize.ExactMatch)
printer = QPrinter()
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setPageSize(page_size)
printer.setOutputFileName('/tmp/testPDFGradient.pdf')

painter = QPainter(printer)
painter.fillRect(gradient_rect, gradient)
painter.end()


Hi, try
...
gradient_rect = QRect(0, 0, 500, 25)
gradient = QLinearGradient(0, 0, 500, 25)
gradient.setColorAt(0, Qt.blue)
gradient.setColorAt(1, Qt.red)
...
(i.e. QLinearGradient's ctor expects coords)

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to