如何打印未在窗口/窗口小部件上显示的页面? Qt代码: 切换视图
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的代码没有显示,只加载了要打印的HTML?上述代码的结果是PrinterPreviewer中的白页。 这是加载html以及之后调用预览器的代码: Qt代码: 切换视图
m_pageToPrint->mainFrame()->setHtml(finalHTML);
m_printPreviewDialog->exec();
要复制到剪贴板,请将视图切换为纯文本模式 finalHTML是一个有效的HTML代码。
答案 0 :(得分:0)
我使用此代码打印我的HTML报告页面:
<强> reportprint.h 强>
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 强>
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();
}