2024-04-25 13:12:20 发布
网友
我的发票
我在Python中有一个几乎完成的项目,它使用QPrintPreviwDialog根据上面的图片显示和打印数据。我用QTextDocumento来处理HTML。在
有没有办法在页码空间写东西。我想写黄色的信息到页数空间作为页脚。或者有没有其他解决方案来显示页脚而不是使用pyjasper,一个不是python一部分的解决方案?在
从C++到python转换my previous answer,修改文本的位置,我展示了如何添加页脚。在
from PyQt5 import QtCore, QtGui, QtWidgets, QtPrintSupport textMargins = 12 borderMargins = 10 def mmToPixels(printer, mm): return mm * 0.039370147 * printer.resolution() def paintPage(pageNumber, pageCount, painter, doc, textRect, footerHeight): painter.save() textPageRect = QtCore.QRectF(QtCore.QPointF(0, pageNumber*doc.pageSize().height()), doc.pageSize()) painter.setClipRect(textRect) painter.translate(0, -textPageRect.top()) painter.translate(textRect.left(), textRect.top()) doc.drawContents(painter) painter.restore() footerRect = QtCore.QRectF(textRect) footerRect.setTop(textRect.bottom()) footerRect.setHeight(footerHeight) # draw footer painter.save() pen = painter.pen() pen.setColor(QtCore.Qt.blue) painter.setPen(pen) painter.drawText(footerRect, QtCore.Qt.AlignCenter, "Page {} of {}".format(pageNumber+1, pageCount)) painter.restore() def printDocument(printer, doc): painter = QtGui.QPainter(printer) doc.documentLayout().setPaintDevice(printer) doc.setPageSize(QtCore.QSizeF(printer.pageRect().size())) pageSize = printer.pageRect().size() tm = mmToPixels(printer, textMargins) footerHeight = painter.fontMetrics().height() textRect = QtCore.QRectF(tm, tm, pageSize.width() - 2 * tm, pageSize.height() - 2 * tm - footerHeight) doc.setPageSize(textRect.size()) pageCount = doc.pageCount() for pageIndex in range(pageCount): if pageIndex != 0: printer.newPage() paintPage(pageIndex, pageCount, painter, doc, textRect, footerHeight) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) document = QtGui.QTextDocument() cursor = QtGui.QTextCursor(document) blockFormat = QtGui.QTextBlockFormat() for i in range(10): cursor.insertBlock(blockFormat) cursor.insertHtml("<h1>This is the {} page</h1>".format(i+1)) blockFormat.setPageBreakPolicy(QtGui.QTextFormat.PageBreak_AlwaysBefore) printer = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution) printer.setPageSize(QtPrintSupport.QPrinter.A4) printer.setOutputFormat(QtPrintSupport.QPrinter.PdfFormat) dialog = QtPrintSupport.QPrintPreviewDialog(printer) dialog.paintRequested.connect(lambda print, doc=document: printDocument(printer, doc)) dialog.exec_()
从C++到python转换my previous answer,修改文本的位置,我展示了如何添加页脚。在
相关问题 更多 >
编程相关推荐