簡體   English   中英

QT html和CSS在沒有QWebEngineView的情況下創建pdf

[英]QT html and CSS to create pdf without QWebEngineView

我想從html和CSS文件創建一個pdf文件。 目前我正在嘗試使用QWebView QT,因為Ubuntu不支持QwebEngineView,因為沒有MVC2013或者Chrome。

我希望創建者與平台無關。 我在這里顯示所有代碼

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;
}

首先,替換

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM