3

我在尝试将 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_ 调用的能力?

4

1 回答 1

6

QPrinter::newPage()没有 active就不能打电话QPainter。它应该False在您的情况下返回。

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

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()
于 2013-11-14T10:08:02.743 回答