html - QT html和CSS转pdf文件

标签 html css qt c++11 pdf

我正在使用 QTextDocument 并使用 setHtml 添加 html。然后我用QPrinter打印A4 pdf格式 QPrinter::PdfFormat 但是打印的pdf没有带css样式表。我还尝试了 QTextDocument::setDefaultHtmlsetResource

代码如下。如何获取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/

相关文章:

html - 如何在 CSS 中水平居中 10000px(比全屏宽)的 div?

c++ - QTreeView:维护QModelIndex与底层数据的映射

html - Bootstrap 导航栏样式问题

javascript - 从 React 中的多个选择表单中获取选项

css - Google PageSpeed Insights 声称我正在加载网站未使用的字体

linux - 如何在 Odroid XU3 上构建和运行 qt/qt creator?

c++ - 如何停止有关未使用的私有(private)字段的警告?

html - 显示大时如何使二维码呈现清晰?

html - 垂直和水平居中 block ,动态宽度和高度

javascript - jCarousel 动画