我必须使用 QTextDocument 将 HTML 转换为 pdf,但是,如果我在 html 中指定字体(这就是我需要的),则自动换行结果会损坏。
要编译此代码,请在 .pro 中添加 QT += printsupport
例子:
#include <QGuiApplication>
#include <QPrinter>
#include <QTextDocument>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QPrinter printer(QPrinter::PrinterResolution);
printer.setPaperSize(QPrinter::A4);
printer.setOrientation(QPrinter::Portrait);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
QString html;
html.append("<center><pre style=\"font-size:26pt;font-family:DejaVu Sans Mono\"><br />");
html.append("<b>Test 1:</b><br />");
html.append("AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA<br />");
html.append("<em>--------------------</em><br />");
html.append("<b>Test 2:</b><br />");
html.append("BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB<br />");
html.append("<em>--------------------</em><br />");
html.append("</pre></center><br />");
QTextDocument document;
document.setPageSize(printer.pageRect().size());
document.setHtml(html);
document.print(&printer);
return 0;
}
在这种情况下,样式会破坏自动换行。
示例 2:
#include <QGuiApplication>
#include <QPrinter>
#include <QTextDocument>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QPrinter printer(QPrinter::PrinterResolution);
printer.setPaperSize(QPrinter::A4);
printer.setOrientation(QPrinter::Portrait);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
QString html;
html.append("<center><br />");
html.append("<b>Test 1:</b><br />");
html.append("AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA<br />");
html.append("<em>--------------------</em><br />");
html.append("<b>Test 2:</b><br />");
html.append("BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB<br />");
html.append("<em>--------------------</em><br />");
html.append("</center><br />");
QTextDocument document;
document.setPageSize(printer.pageRect().size());
document.setDefaultFont(QFont("DejaVu Sans Mono", 26));
document.setHtml(html);
document.print(&printer);
return 0;
}
在这种情况下,它可以完美运行。
我是否遗漏了什么或者样式规范无法用于自动换行?
谢谢你。