PyQt打印多页到PDF只能获得最后一页

时间:2013-11-14 09:30:38

标签: qt pyqt pdf-generation

我有一个问题,我正在尝试将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_调用的能力?

1 个答案:

答案 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()