首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印未显示的WebPage

打印未显示的WebPage
EN

Stack Overflow用户
提问于 2014-09-26 00:59:49
回答 1查看 73关注 0票数 0

如何打印窗口/小部件上未显示的页面?Qt Code:切换视图

代码语言:javascript
复制
QPainter painter(printer);
m_webView->page()->setViewportSize(m_pageToPrint->mainFrame()->contentsSize());
painter.scale(scale, scale);
m_pageToPrint->mainFrame()->render(&painter);

要复制到剪贴板,切换视图到纯文本模式这是代码使用(现在是从m_webView转换为m_pageToPrint)来打印页面从webView,这是显示,但m_pageToPrint的代码,没有显示,只有加载的超文本标记语言被打印?上述代码的结果是PrinterPreviewer中的一个白色页面。这是加载html的代码,然后调用预览器: Qt Code: Switch视图

代码语言:javascript
复制
m_pageToPrint->mainFrame()->setHtml(finalHTML);
m_printPreviewDialog->exec();

要复制到剪贴板,请将视图切换到纯文本模式。finalHTML是有效的html代码。

EN

回答 1

Stack Overflow用户

发布于 2014-09-26 06:40:47

我使用以下代码来打印我的HTML报告页面:

报告打印.h

代码语言:javascript
复制
class ReportPrint : public QObject
{
    Q_OBJECT
    public:
        ReportPrint(QObject *parent = 0);
        void printHTML(QUrl url);
    private:
        QWebView m_webView;
        QPrinter m_printer;
        QPrintPreviewDialog *m_preview;
    protected slots:
        void printReady(bool enable);
        void paintRequested(QPrinter*printer);
}

reportprint.cpp

代码语言:javascript
复制
ReportPrint::ReportPrint(QObject *parent) :
    QObject(parent) {
    connect(&m_webView, SIGNAL(loadFinished(bool)),this, SLOT(printReady(bool)));
}

void ReportPrint::printHTML(QUrl url) {
    m_webView.page()->settings()->clearMemoryCaches();
    // here I point to directory which contains printed html file so the engine can found css files
    QUrl base = QUrl::fromLocalFile(QApplication::applicationDirPath() + "templates/");         
    m_webView.setHtml(url,base);
}

void ReportPrint::printReady(bool enable) {
    if(print_to_default_printer) {
        QString pn = QPrinterInfo::defaultPrinter().printerName();
        m_printer.setPrinterName(pn);
        m_printer.setOutputFormat(QPrinter::NativeFormat);
        m_webView.print(&m_printer);
    } else if(print_with_preview) {
        m_preview = new QPrintPreviewDialog(&p_printer);                 
        connect(m_preview,SIGNAL(paintRequested(QPrinter*)),
                this,SLOT(paintRequested(QPrinter*)));
    }

}

void ReportPrint::paintRequested(QPrinter *printer) {
    m_printer.setOutputFormat(QPrinter::NativeFormat);
    m_webView.print(printer);
    m_preview->deleteLater();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26044148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档