【问题标题】:PyQt print multiple pages to PDF only get last pagePyQt 将多页打印到 PDF 只获取最后一页
【发布时间】:2013-11-14 09:30:37
【问题描述】:

我在尝试将 QWebView/QTextDocument 打印到多页 PDF 时遇到问题,但是无论我做什么,我都只能得到最后一页的单页 PDF。正如大多数示例所示,我正在使用 printer.newPage() 命令,但我总是得到相同的结果。这个程序为我展示了这个问题(使用 QTextDocument,QWebView 给出了相同的结果):

from PyQt4.QtGui import QTextDocument, QPrinter, QApplication

import sys
app = QApplication(sys.argv)

doc = QTextDocument()
doc.setHtml('''
<html>
<body>
<h1>Page 1</h1>
</body>
</html>
''')

printer = QPrinter()
printer.setOutputFileName("foo.pdf")
printer.setOutputFormat(QPrinter.PdfFormat)
doc.print_(printer)

doc.setHtml('''
<html>
<body>
<h1>Page 2</h1>
</body>
</html>
''')
printer.newPage()
doc.print_(printer)

print "done!"

我是否犯了一些明显的错误,还是我误解了 newPage() 的使用以及在同一台打印机上进行多次 print_ 调用的能力?

【问题讨论】:

    标签: qt pyqt pdf-generation


    【解决方案1】:

    如果没有活动的QPainter,您将无法呼叫QPrinter::newPage()。在您的情况下,它应该返回 False

    您可以使用QPainter 来解决此问题:

    doc = QTextDocument()
    doc.setHtml('''
    <html>
    <body>
    <h1>Page 1</h1>
    </body>
    </html>
    ''')
    
    printer = QPrinter()
    printer.setOutputFileName("foo.pdf")
    printer.setOutputFormat(QPrinter.PdfFormat)
    doc.print_(printer)
    
    # Create a QPainter to draw our content    
    painter = QPainter()
    painter.begin( printer )
    
    # Draw the first page removing the pageRect offset due to margins.
    doc.drawContents(painter, printer.pageRect().translated( -printer.pageRect().x(), -    printer.pageRect().y() ))
    
    doc.setHtml('''
    <html>
    <body>
    <h1>Page 2</h1>
    </body>
    </html>
    ''')
    
    # A new page
    printer.newPage()
    
    # The second page
    doc.drawContents(painter, printer.pageRect().translated( -printer.pageRect().x(), -printer.pageRect().y() ))
    
    # Done.
    painter.end()
    

    【讨论】:

    • 谢谢,太棒了!出于某种原因,我不得不将 drawContents 的第二个参数包装在 QRectF 中,但除此之外,它的作用就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多