2015-09-23 106 views
0

我创建了一个应用程序,它使用QWebView创建模板,然后将其打印为pdf文件。 在视图中,我为背景图像设置了一个背景图像,并且在执行程序时,第一次打印PDF时,图像不会以pdf格式打印。然后,我再次打印相同的pdf并出现图像。因此对于所有的子排印印刷品。 因此,它不适用于第一次打印。QWebView不能正确加载图像

我debbuged的HTML代码和背景图像是全部设置。

用于打印的PDF文件,我用这个:

QPrinter printer; 
printer.setOrientation(QPrinter::Landscape); 

printer.setPaperSize(QSizeF(76.2,180),QPrinter::Millimeter); 
printer.setPageMargins(27,11.2,4,4.4,QPrinter::Millimeter); 

QPrintDialog *dialog = new QPrintDialog(&printer); 

if (dialog->exec() == QDialog::Accepted){ 
    QWebView *view = new QWebView(); 
    QUrl url(QApplication::applicationDirPath()); 
    view->setHtml(cheque,url); 

    view->print(&printer); 
} 

检查是HTML模板

+0

你创建一个新的'QWebView' instanse('QWebView *视图=新QWebView();')对于每个后续打印中的问题代码或'view'被再利用(存储为一个类的成员) ? –

+0

从'QWebView :: setHtml'文档:“html立即被加载;外部对象被异步加载。”我猜你在调用'view-> setHtml'时,图像尚未加载。这可能是问题所在。 – HeyYO

+0

谢谢你们,解决了它 – rocko

回答

0

的问题是,对象是正在QWebView的异步加载。所以我在调用QPrintDialog之前声明了QWebView。

QPrinter printer; 
printer.setOrientation(QPrinter::Landscape); 

printer.setPaperSize(QSizeF(76.2,180),QPrinter::Millimeter); 
printer.setPageMargins(27,11.2,4,4.4,QPrinter::Millimeter); 

QWebView *view = new QWebView(); 
QUrl url(QApplication::applicationDirPath()); 
view->setHtml(cheque,url); 

QPrintDialog *dialog = new QPrintDialog(&printer); 

if (dialog->exec() == QDialog::Accepted){ 

    view->print(&printer); 
} 
+0

从时间竞赛的角度来看,这个解决方案是不安全的。 当然,通常打印对话框需要相当长的时间,所以'QWebView'可以完成加载它的内容。但它是一个错误。打印只能在页面加载时启动。信号'QWebView :: loadFinished(bool)'可以用来正确执行。 –