使用页眉和页脚打印QWebFrame的内容

时间:2015-08-15 15:48:25

标签: c++ qt webkit qwebkit qprinter

我想用页眉和页脚打印 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)
  4. 先验我不知道我要打印多少页。目前,我正在继承 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

0 个答案:

没有答案