一.前言
楼主最近在了解Qt导出PDF的方式,目前分别找到了
Qt笔记(四十七)之QPrinter方式导出PDF
Qt笔记(四十八)之QPdfWriter方式导出PDF
在寻找的过程之后,找到了第三种方式,利用QTextDocument+QPrinter方式可以导出,即是富文本方式
二.流程
1.基本思路
》QPrinter设置PDF基本属性
》采用html标签来设置PDF内容
》最终保存
2.核心代码
void PdfWidget::on_pushButton_3_clicked()
{
QString pdfName = "E://"+QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss")+".pdf";
QString pdfPath = QFileDialog::getSaveFileName(this,"QPdfWriter方式导出PDF",pdfName,"*.pdf");
if(pdfPath.isEmpty())
return;
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPageSize(QPagedPaintDevice::A4);
printer.setOutputFileName(pdfPath);
printer.setOrientation(QPrinter::Portrait); // 默认页面方向
printer.setPageMargins(5, 5, 5, 5, QPrinter::Millimeter); // 设置边距
// 绘制的内容
QString html = QString("<table width='600' border='1' align='center' frame='border' cellspacing='0' cellpadding='3px' rules='all'>");
html += "<tr>";
// 表头
QStringList headers;
headers<<"标题1"<<"标题2"<<"标题3"<<"标题4"<<"标题5";
for (QString ti: headers) {
html += QString("<th>%1</th>").arg(ti);
}
html += "</tr>";
qDebug()<<"html:"<<html;
// 单元格内容
for (int i = 0; i < 10; i++) {
html += "<tr>";
for (int j = 0; j < headers.count(); j++) {
html += QString("<td>内容%1</td>").arg(j+1);
}
html += "</tr>";
}
html += "</table>";
qDebug()<<"html:"<<html;
QTextDocument textDoc;
textDoc.setHtml(html);
textDoc.print(&printer);
//
QDesktopServices::openUrl(QUrl(pdfPath));
}
3.效果
三.其他
1.将代码中中的html变量的内容打印,然后复制另存为html,用浏览器打开可以看到如下:
和生成的PDF中的布局一样,因此楼主觉得这种方式或许可能更适合来作为导出PDF的基本方式,因为可以先用html来布好局,然后抽离出可变的内容,利用程序动态写入