我有一个问题,我正在尝试将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_调用的能力?
答案 0 :(得分:6)
如果没有有效QPrinter::newPage()
,您就无法致电QPainter
。它会在您的情况下返回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()