gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:12 24 4
gpt4 key购买 nike

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

我希望创作者独立于平台。我在这里显示所有代码

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 类只是为了测试,你需要把代码放到你的类中。

表单.h :

class Form: public QObject{
Q_OBJECT

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

private:
QWebView* webView;

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

表单.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);
}

关于html - QT html和CSS在没有QWebEngineView的情况下创建pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com