Qt笔记(四十九)之QTextDocument方式导出PDF

104 篇文章 125 订阅

一.前言
楼主最近在了解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来布好局,然后抽离出可变的内容,利用程序动态写入

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值