我想从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;
}
答案 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);
}