Qt笔记(四十八)之QPdfWriter方式导出PDF

104 篇文章 126 订阅

一.前言
楼主在上篇文章:Qt笔记(四十七)之QPrinter方式导出PDF
讲述了QPrinter导出PDF的基本思路,这篇文章就记录下Qt5导出PDF的领另一种思路,即是QPdfWriter+QFile

二.流程
1.基本思路
》QFile创建文件
》QPdfWriter设置PDF的属性
》QPainter绘制内容
2.核心代码

void PdfWidget::on_pushButton_2_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;

    QFile pdfFile(pdfPath);
    if(pdfFile.open(QIODevice::WriteOnly))
    {
        // 实例化写入对象
        QPdfWriter *writer = new QPdfWriter(&pdfFile);

        // 设置纸张属性(ps:有反馈说设置其他纸张类型,但是打印机还是A4的格式,楼主没有打印件 所以没得测试 有条件可以测试下)
        writer->setPageSize(QPagedPaintDevice::A4);

        // 设置dpi 好像基本都是设置300像素
        writer->setResolution(300);

        // 设置边距
        writer->setPageMargins(QMarginsF(20,20,20,20));

        QPainter *painter = new QPainter(writer);
        painter->setFont(QFont("宋体",13));

        // 开始绘制内容
        int start = 10;
        painter->drawText(QRect(0,start,writer->width(),100),Qt::AlignCenter,"标题");

        start+=120;
        //        QPen pen;
        //        pen.setColor(Qt::gray);
        painter->setPen(QPen(QBrush(QColor(0,0,0)),5));
        painter->drawLine(0,start,writer->width(),start);

        start+=120;
        painter->drawText(QRect(0,start,writer->width(),100),Qt::AlignLeft,"标题1");

        delete painter;
        painter=nullptr;
        delete writer;
        writer = nullptr;

        // 打开
        QDesktopServices::openUrl(pdfPath);
        pdfFile.close();
    }
}

在这里插入图片描述
3.其他
1.楼主觉得绘制pdf的内容位置,是要自己计算的,应该做不了通用的pdf文件导出
2.至于计算内容位置,楼主倒是有感觉在调css的感觉,边写程序边调整,效率应该是慢了点,或者可以考虑采用类似html方式布局好,然后再去对应的计算逻辑

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值