为什么QTextBrowser弄乱了我的HTML代码?

时间:2018-10-01 10:39:29

标签: qt qt5 qtextbrowser

我正在尝试创建PDF发票,因为我的要求很基本,所以我想到了使用HTML + QTextBrowser。我已经编写了可以根据需要创建HTML代码的函数。例如,如果我想插入文本,则有一个函数,要插入表格,我也创建了一个函数,依此类推。我使用setHtml()函数将此HTML代码设置为QTextBrowser,然后尝试创建PDF。问题是我没有达到我的期望,我的HTML代码没有问题,因为我使用了相同的代码,并且在Chrome浏览器中看到了一切都很好。但是,当我在setHtml函数中使用它时,Qt正在修改html代码,结果是不可取的。在下面,我还将发布带有预期结果图像的代码。

void PDF_API::Save(const QString &filePath)
{ 
    QTextDocument document;
    document.setHtml(HTMLCode); // HTMLCode is a QString obj that holds all my html code

    // Creates a copy in html to check the html code. Comment the code if not needed
    QFile file(QDir::currentPath()+"/report.html");
    if(file.open(QFile::WriteOnly))
    {
        file.write(HTMLCode.toStdString().c_str());
        file.close();
    }

    // Printing begins here
    QPrinter printer(QPrinter::PrinterResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setPaperSize(QPrinter::Tabloid);
    printer.setOutputFileName(filePath);
    printer.setPageMargins(QMarginsF(0.1, 0.01, 0.1, 0.1));
    document.print(&printer);
}

在将其设置为QTextBrowser之前的原始HTML代码

"<html><body><p align=\"center\" style=\"color: #000000; font-family: Times New Roman; font-size: 12pt; line-height: 100%;\">  <b>CENTER </b> </p><hr><p style = \"text-align:left; color: #ff0000; font-family: Times New Roman; font-size: 14pt; line-height: 100%;\"> <b>Left Text</b> <span style = \"float:right; color: #ffff00; font-family: Times New Roman; font-size: 14pt; line-height: 100%;\"> <b>Right Text</b> </span> </p></body></html>"

由QTextBrowser生成的HTML修改代码

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:100%;\"><span style=\" font-family:'Times New Roman'; font-size:12pt; font-weight:600; color:#000000;\">CENTER </span></p>\n<hr />\n<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:100%;\"><span style=\" font-family:'Times New Roman'; font-size:14pt; font-weight:600; color:#ff0000;\">Left Text</span><span style=\" font-family:'Times New Roman'; font-size:14pt; color:#ff0000;\"> </span><span style=\" font-family:'Times New Roman'; font-size:14pt; font-weight:600; color:#ffff00;\">Right Text</span><span style=\" font-family:'Times New Roman'; font-size:14pt; color:#ffff00;\"> </span></p></body></html>"

注意::以上HTML代码在QString中保存的调试控制台中显示

在使用原始html代码的Chrome浏览器中看到的
enter image description here

在QTextBrowser中看到 enter image description here

如何防止QTextBrowser弄乱我的html代码并获得期望的结果?

PS:这已经发生过很多次了,因为在我只需要打印pdf之前,我使用了称为wkhtmltopdf的外部过程来创建pdf,但是现在在这种情况下,我希望看到导致应用程序本身。

1 个答案:

答案 0 :(得分:3)

QTextBrowser仅支持HTML & CSS的子集。 要获得全面支持,请尝试使用QWebView