0

我想打印一个带有页眉和页脚的QWebView 。我正在使用QPrintPreviewDialog类来预览打印。我看到了项目phantomjswkhtmltopdf如何解决这个问题,但在我的项目中包含 WebKit 的修改版本似乎有点过分。显然用 Qt 和 Webkit 打印页眉和页脚,这是一个没有彻底解决的问题:

  1. https://bugs.webkit.org/show_bug.cgi?id=30357
  2. https://bugreports.qt.io/browse/QTBUG-29619
  3. https://wiki.qt.io/Qt_project_org_faq(问题 229)

先验我不知道我要打印多少页。目前我正在继承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));
}

编辑(基于 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

4

0 回答 0