多页PDF打印

时间:2020-07-22 05:26:16

标签: python pyqt pyqt5

我在纸盘中打印多页报告,但第一页打印数据,其余页打印空白。

当我单击“打印”按钮,然后打开pdf文件并生成pfd文件时。

我的编码在下面

 from PyQt5 import QtWidgets, QtGui, QtCore, QtPrintSupport, Qt

from PyQt5.QtWidgets import*
import sys
class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        """MainWindow constructor"""
        super().__init__()
        # Main UI code goes here
        self.resize(300,200)
        self.printButton = QtWidgets.QPushButton("Print", self)
        self.printButton.clicked.connect(self.printing)
        self.textbox = QLineEdit(self)
        self.textbox.move(50,100)
        # End Main UI code
        self.show()

    def printing(self):
        printer = QtPrintSupport.QPrinter()
        x = self.textbox.text()
        print(x)
        painter = QtGui.QPainter()
        header = QtGui.QTextDocument("<h1<Header</h1>")
        body = QtGui.QTextDocument("content...")
        footer = QtGui.QTextDocument("Pagenumber")

        tm =12
        pageSize = printer.pageRect().size()
        footerHeight = painter.fontMetrics().height()
        textRect = QtCore.QRectF(tm, tm, pageSize.width() - 2 * tm, pageSize.height() - 2 * tm - footerHeight)
        footerRect = QtCore.QRectF(textRect)
        #footerRect.setTop(textRect.top())
        footerRect.setTop(textRect.bottom())
        footerRect.setHeight(footerHeight)

        # draw footer
        '''painter.save()
        pen = painter.pen()
        pen.setColor(QtCore.Qt.blue)
        painter.setPen(pen)'''

        headerRect = QtCore.QRectF(12,12,750,100)
        headerRect.setTop(textRect.top())
        headerRect.setHeight(50)
        
        #painter.restore()
        dialog = QtPrintSupport.QPrintDialog(printer)
        tm = 20
        y = 0
        if dialog.exec_() == QtPrintSupport.QPrintDialog.Accepted:
            painter.begin(printer)
            painter.setFont(QtGui.QFont("times",18))
            painter.drawText(headerRect, QtCore.Qt.AlignCenter, "Page1 ")
            painter.drawText(10,100,"Name :-")
            painter.drawText(200,100,"Name :-")
            painter.drawText(400,100,"Name :-")
            painter.drawRect(100,500,500,500)
            for i in range(100):
                painter.drawText(10,100+tm*i,"{}".format(i))
                painter.drawText(200,100+tm*i,"{}".format(i))
                painter.drawText(400,100+tm*i,"{}".format(i))
                y = 100+tm*i
                if y > printer.height():
                    printer.newPage()
                y = 0
                    
            #painter.drawText(40,10,self.textbox.text())
            
            painter.drawText(footerRect, QtCore.Qt.AlignCenter, "Page1 ")
            print("What needs to go here???")

            painter.end()


if __name__ == '__main__':  # only run this code if this script is called directly
    app = QtWidgets.QApplication(sys.argv)
    mw = MainWindow()
    mw.setWindowTitle("Printing")
    sys.exit(app.exec())

使用以下行生成多个页面,但所有页面均为空白 我想打印所有带有剩余打印信息的页面。

if y > printer.height():
       printer.newPage()

请为我提供指导。

0 个答案:

没有答案
相关问题