簡體   English   中英

QPrinter無法正確設置HTML頁面樣式以在PDF文檔中呈現圖像

[英]QPrinter unable to style HTML page properly to render image in PDF document

我想創建一個具有正確樣式HTML的PDF文檔。 這就是我想要的:

QTextDocument *doc = new QTextDocument();
const char* s1 = "<html><head><style>body { font-family: sans-serif;}.note-atomic { background: rgb(242,242,242); width: 1000px; margin: 5px auto; border: 1px solid grey; border-radius: 8px;padding: 5px;}</style></head><body><div class = 'note-atomic'>Hi</div><img src = '/Users/attitude/Desktop/RnSghvV.png' width='400' height='300' /></body></html>";
doc->setHtml(QString::fromStdString(s1));

QPrinter *printer = new QPrinter();
printer->setOutputFileName("/Users/attitude/Desktop/fool.pdf");
printer->setOutputFormat(QPrinter::PdfFormat);

QPainter *painter = new QPainter();
painter->begin( printer );
doc->drawContents(painter, printer->pageRect().translated( -printer->pageRect().x(), -    printer->pageRect().y() ));
doc->print(printer);

const char* s2 = "<html><body><div>Bye</div></body></html>";
doc->setHtml(QString::fromStdString(s2));

printer->newPage();
doc->drawContents(painter, printer->pageRect().translated( -printer->pageRect().x(), - printer->pageRect().y() ));

doc->print(printer);
painter->end();

我希望PDF有兩頁 - 第一頁有文字Hi ,下一頁和最后一頁有文字再見 第一個頁面樣式顯示在具有相同標記的HTML頁面中:

在此輸入圖像描述

但是,PDF的第一頁出現的內容完全搞砸了:

在此輸入圖像描述

如何讓它看起來像預期的那樣?

我正在HTML文檔中嘗試的圖像: http//imgur.com/RnSghvV

平台 - Qt 5.3.1,32位。 OS X Yosemite。

這是QTextDocument 它呈現了豐富的文本(它不是HTML + CSS)。

您可以在http://doc.qt.io/qt-5/richtext-html-subset.html上查看可用的屬性和元素(例如, pdiv沒有css屬性border )。

如果你把你的html代碼放到QTextEdit ,你也可以看到它在Qt Designer中的外觀。

要呈現HTML,您可以使用QWebViewhttp://doc.qt.io/qt-5/qwebframe.html#print

webview->mainFrame()->print(printer);

QTextDocument不是Web瀏覽器。 它不會為您獲取網絡URL。 您需要將QVariant QTextDocument::loadResource(int type, const QUrl & name)方法添加到QObjectQWidget is-a QObject !),並使QTextDocument成為該對象的子級。 文檔實例將調用loadResource的實現,您可以在其中利用QNetworkAccessManager進行提取。

為了使用戶友好,您無法阻止網絡請求。 這是通過兩次處理來完成的。 首先,只需記下要加載的URL並啟動它們的提取,返回一個空的QVariant 一旦所有網絡請求成功完成並且您已將它們存儲在緩存中,您就可以重新運行相同的代碼,它將正確呈現頁面,並且不會阻止網絡訪問。

所有這一切都必須異步完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM