为什么 QTextBrowser 弄乱了我的 HTML 代码?
Why QTextBrowser is messing up my HTML code?
我正在尝试创建 PDF 发票,因为我的要求非常基本,所以我考虑使用 HTML + QTextBrowser。我已经编写了可以根据我的需要创建 HTML 代码的函数。例如,如果我想插入文本,有一个函数可以插入 table,我也创建了一个函数等等。我正在使用 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
中保存的调试控制台中看到的
如在 Chrome 浏览器中所见,使用原始 html 代码
如QTextBrowser中所见
如何防止 QTextBrowser 弄乱我的 html 代码并获得我想要的结果?
P.S: 这已经发生过很多次了,因为在我的要求只是打印 pdf 之前,我使用了名为 wkhtmltopdf 的外部进程创建 pdf 的过程,但现在在这种情况下,我想在应用程序本身中查看结果。
QTextBrowser
仅支持 HTML & CSS 的一个子集。
要获得全面支持,请尝试使用 QWebView
.
我正在尝试创建 PDF 发票,因为我的要求非常基本,所以我考虑使用 HTML + QTextBrowser。我已经编写了可以根据我的需要创建 HTML 代码的函数。例如,如果我想插入文本,有一个函数可以插入 table,我也创建了一个函数等等。我正在使用 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
中保存的调试控制台中看到的如在 Chrome 浏览器中所见,使用原始 html 代码
如QTextBrowser中所见
如何防止 QTextBrowser 弄乱我的 html 代码并获得我想要的结果?
P.S: 这已经发生过很多次了,因为在我的要求只是打印 pdf 之前,我使用了名为 wkhtmltopdf 的外部进程创建 pdf 的过程,但现在在这种情况下,我想在应用程序本身中查看结果。
QTextBrowser
仅支持 HTML & CSS 的一个子集。
要获得全面支持,请尝试使用 QWebView
.