QPrinter无法正确设置HTML页面样式以在PDF文档中呈现图像

Sex*_*ast 6 c++ pdf qt qtextdocument qprinter

我想创建一个具有正确样式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();
Run Code Online (Sandbox Code Playgroud)

我希望PDF有两页 - 第一页有文字Hi,下一页和最后一页有文字再见.第一个页面样式显示在具有相同标记的HTML页面中:

在此输入图像描述

但是,PDF的第一页出现的内容完全搞砸了:

在此输入图像描述

如何让它看起来像预期的那样?

我正在HTML文档中尝试的图像:http://imgur.com/RnSghvV

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

tim*_*cov 5

这是QTextDocument.它呈现了丰富的文本(它不是HTML + CSS).

你可以检查可用的属性和元素http://doc.qt.io/qt-5/richtext-html-subset.html(例如不存在的CSS属性borderpdiv).

如果你把你的html代码放进去,你也可以看到它在Qt Designer中的外观QTextEdit.

要呈现HTML,您可以使用QWebView(http://doc.qt.io/qt-5/qwebframe.html#print)

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