I am trying to print a QWidget to pdf at A4 page size with QPrinter. But unable to generate it in a better quality. The PDF looks blurry. Please find the code I have tried below. Any help regarding the pdf quality is highly appreciable.
import os
import datetime
from PySide6.QtCore import QSize
from PySide6.QtGui import QPageSize
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QLabel, QTableWidget, QVBoxLayout, QTableWidgetItem, QHeaderView
from PySide6.QtPrintSupport import QPrinter
class Example(QWidget):
def __init__(self):
super().__init__()
self.setStyleSheet("")
self.setFixedSize(QSize(794, 1123))
self.line = QLineEdit()
self.l1 = QLabel("This is testing")
self.table_widget = QTableWidget(4,5, self)
self.table_widget.setHorizontalHeaderLabels(["Item", "Batch"])
self.table_widget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
self.table_widget.setItem(0,0, QTableWidgetItem("Item Name"))
self.table_widget.setItem(0,1, QTableWidgetItem("Batch no"))
self.table_widget.setItem(0,2, QTableWidgetItem("Item Name"))
self.table_widget.setItem(0,3, QTableWidgetItem("Item Name"))
self.table_widget.setItem(1,0, QTableWidgetItem("Item Name"))
self.table_widget.setItem(1,1, QTableWidgetItem("Item Name"))
self.table_widget.setItem(1,2, QTableWidgetItem("Item Name"))
self.table_widget.setItem(1,3, QTableWidgetItem("Item Name"))
self.table_widget.setItem(2,0, QTableWidgetItem("Item Name"))
self.table_widget.setItem(2,1, QTableWidgetItem("Item Name"))
layout = QVBoxLayout()
layout.addWidget(self.table_widget)
self.setLayout(layout)
def exportToPDF(self, filename):
printer = QPrinter()
printer.setPageSize(QPageSize.A4)
printer.PrinterMode.HighResolution
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName(filename)
self.render(printer)
if __name__ == "__main__":
app = QApplication([])
example = Example()
example.show()
example.exportToPDF("invoice_" + str(datetime.datetime.now().strftime('%Y%m%d%H%M')) + ".pdf")
os.system("start " + "invoice_" + str(datetime.datetime.now().strftime('%Y%m%d%H%M')) + ".pdf")
app.exec()
Please find the pdf attached here - https://drive.google.com/file/d/1p1HbfRQixZ-lfERtfzlF_ZPFX3pkT_tv/view?usp=sharing
I would first like to thank @musicamante, @ekhumoro and @KJ for your help. I finally figured out a solution. Here I am sharing the updated code.