我想用页眉和页脚打印 QWebView 。我使用 QPrintPreviewDialog 类来预览打印件。 我看到了如何解决项目phantomjs和wkhtmltopdf这个问题,但似乎有点过分需要在我的项目中包含WebKit的修改版本。 使用Qt和Webkit显然打印页眉和页脚这是一个没有完全解决的问题:
先验我不知道我要打印多少页。目前,我正在继承 QPrinter 并重新实现 newPage()方法。这是一个可怕的黑客,但几乎工作。我面临的问题是它在pageRect外面打印的所有内容都显示为模糊。水印效果仅出现在预览中而不是打印结果中,但始终存在低质量。
我可以做些什么来打印质量更好的标题,而不是将所有WebKit都带到我的项目中?
我怀疑引入问题的区别在于我使用QWebView :: render而不是QWebView :: print。 QCustomPrinter在打印标题之前有一个关联的QPainter(打印内容时关联的QPainter)。因此,我无法在打印标题时调用QWebVieww:print,因为该方法会尝试将新的QPainter与QPrinter相关联。
void CustomPrinter::printHeader()
{
QPainter & painter =*this->paintEngine()->painter();
QWebView v;
v.setContent("<html> "
"<body>"
" asdadasdasdasd "
"</body>"
"</html>");
v.setFixedSize(this->pageRect().size());
v.render(&painter,QPoint(0,- 95),QRegion(0,0,this->pageRect().width(),95));
}
EDIT(基于Kuba Ober的回答): 使用QTextDocument而不是QWebView解决了质量问题。
void CustomPrinter::printHeader()
{
QPainter * painter =p->paintEngine()->painter();
painter->save();
QTextDocument v;
v.setHtml(QString::fromStdString(_impresion.cabecera()));
QRectF r =this->pageRect();
r.moveTo(0,0);
r.setHeight(95);
painter->translate(0,-95);
v.drawContents(painter,r);
painter->restore();
}
我分享了我所谈论的最小例子。 CustomPrinter类打印标题。 https://www.dropbox.com/s/2vifzk8rs6scrx5/stackExample.tar.gz?dl=0