QT html和CSS在没有QWebEngineView的情况下创建pdf

时间:2016-09-30 06:27:45

标签: html c++ css qt pdf

我想从html和CSS文件创建一个pdf文件。目前我正在尝试QT使用QWebView,因为Ubuntu不支持QwebEngineView,因为没有MVC2013或铬。

我希望创作者与平台无关。我在这里显示所有代码

QDir::setCurrent(QCoreApplication::applicationDirPath());

    QFile  htmlFile ("myhtml.html");
    if (!htmlFile.open(QIODevice::ReadOnly | QIODevice::Text)){
        return -1;
    }


    QWebView *pWebView = new QWebView();
    pWebView->load( QUrl::fromLocalFile(QFileInfo(htmlFile).path()) );


    QPrinter printer(QPrinter::HighResolution);
    printer.setPageSize(QPrinter::A4);
    printer.setOutputFormat(QPrinter::PdfFormat);

    printer.setOutputFileName("output.pdf");

    pWebView->print(&printer);
    delete pWebView;

html文件如下

<html>

<head>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <h1> <center> ULTRA TECH LABORATORIES PRIVATE LIMITED </center> </h1>
    <h3> <center> CLOTH MARKET, G.E. ROAD KUMHARI, DIST-DRUG(C.G.) </center> </h3>
    <h1> <center> TLD MONITORING SERVICE - DOSE REPORT </center> </h1>
    <p>
        INSTITUTION NO. 017303
        <span>SERVICE PERIOD: APR-JUN 2012</span>
    </p>
    <p>
        ASHOK LABORATORY, KOLKATA
        <span>SERVICE FREQUENCY: QUARTERLY</span>
    </p>
    <center>
        <ul>
        <li>lorem ipsum dolor</li>
        <li>sit amet</li>
        <li>foo</li>
        <li>bar</li>
        </ul>
    </center>
</body>

CSS文件如下

  ul {
    width: 500px;
    }
li {
      width: 50%;
      float: left;
      border: 1px solid #000;
      margin: 0;
      list-style-type: none;
      box-sizing: border-box;
}
li:nth-child(odd) {
    clear: left;
}

p {
    text-align:left;
}
span {
    float:right;
}

1 个答案:

答案 0 :(得分:0)

首先,替换

pWebView->load( QUrl::fromLocalFile(QFileInfo(htmlFile).path()) );

pWebView->load( QUrl::fromLocalFile(QFileInfo(htmlFile).absoluteFilePath()) );

我不会改变html或css中的内容。 Css位于html附近。

然后,在连接到loadFinished信号的插槽中实现保存为pdf。因为当您将页面保存为pdf时,它可能尚未加载。

connect (pWebView,SIGNAL(loadFinished(bool)), this,SLOT(savePDF(bool)));

void Form::savePDF(bool ok)
{
    QPrinter printer(QPrinter::HighResolution);
    printer.setPageSize(QPrinter::A4);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName("output.pdf");
    ui->webView->print(&printer);
}

在你的代码为我工作之后。

修改

我只使用Form类进行测试,您需要将代码放入您的班级。

form.h:

class Form: public QObject{
    Q_OBJECT

public:
    explicit Form(QObject * parent = 0);

private:
    QWebView* webView;

private slots:
    void savePDF(bool ok);
};

form.cpp:

Form::Form(QObject *parent):
    QObject(parent)
{

    webView = new QWebView();
    QFile  htmlFile ("html/index.html");
    if (!htmlFile.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug()<<"nosuch file";
    }
    webView->load( QUrl::fromLocalFile(QFileInfo(htmlFile).absoluteFilePath()) );
    connect (webView,SIGNAL(loadFinished(bool)), this,SLOT(savePDF(bool)));
    webView->show();  //comment it to hide webview windows
}

void Form::savePDF(bool ok)
{
    QPrinter printer(QPrinter::HighResolution);
    printer.setPageSize(QPrinter::A4);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName("output.pdf");
    webView->print(&printer);
}