我正在使用 QTextDocument
并使用 setHtml
添加 html。然后我用QPrinter
打印A4 pdf格式 QPrinter::PdfFormat
但是打印的pdf没有带css样式表。我还尝试了 QTextDocument::setDefaultHtml
和 setResource
。
代码如下。如何获取pdf格式的CSS样式。 我使用 ubuntu 和 qmake 进行编译。
const int highQualityDPI = 300;
QDir::setCurrent(QCoreApplication::applicationDirPath());
QFile htmlFile ("myhtml.html");
if (!htmlFile.open(QIODevice::ReadOnly | QIODevice::Text)){
return -1;
}
QString htmlContent;
QTextStream in(&htmlFile);
htmlContent=in.readAll();
QFile cssFile ("style.css");
if (!cssFile.open(QIODevice::ReadOnly | QIODevice::Text)){
return -1;
}
QString cssContent;
QTextStream cssIn(&cssFile);
cssContent = cssIn.readAll();
QTextDocument *document = new QTextDocument();
document->addResource( QTextDocument::StyleSheetResource, QUrl( "style.css" ), cssContent );
document->setHtml( htmlContent );
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("output.pdf");
document->print(&printer);
delete document;
return 0;
最佳答案
使用 QWebEngineView 怎么样? & QWebEnginePage ?只需在 WebView 中加载您的 HTML 文件并调用 printToPdf功能:
const QString fileName = QFileDialog::getSaveFileName(0,
tr("Save pdf"),
getLastDirectory(),
tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
return;
}
ui->webView->page()->printToPdf(fileName);
与 QWebKit 一起使用:
// Set location of resulting PDF
const QString fileName = QFileDialog::getSaveFileName(0,
tr("Save pdf"),
getLastDirectory(),
tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
return;
}
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFileName(fileName);
// Create PDF
ui->webview->print(&printer);
如何用css加载html文件?如果您的 HTML 正确链接同一文件夹中的 CSS 文件:
QFile htmlFile ("myhtml.html");
ui->webView->load(QUrl::fromLocalFile(QFileInfo(htmlFile).absoluteFilePath()));
关于html - QT html和CSS转pdf文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761989/