qt输出自定义的pdf文件源码详解

qt中有两种方式可以输出pdf:

方式1:使用QPrinter即打印机的方式打印pdf

这种方式,在qt4成为唯一的方式。

QPrinter printer(QPrinter::HighResolution);    //高清晰度
printer.setPageSize(QPrinter::A4);             //设置纸张大小
printer.setResolution(300);                    //设置清晰度,即dpi ,每个平方英寸像素为300
printer.setOutputFormat(QPrinter::PdfFormat);  //设置导出类型

QPainter *painter = new QPainter();
painter->begin(&printer);
//显示文本
painter->drawText(50,50,ui->label->text());
//画横线
painter->drawLine(0,375,1500,375);
//显示图片
QPixmap pixmap("C:\\xx.png");
painter->drawPixmap(0,0,pixmap);

painter->end();
delete painter;
painter = Q_NULLPTR;    //养成编程好习惯,回收对象要置空

相关博客:

Qt开发-ui导出pdf格式 - 知乎

方式2:QPdfWriter方式输出pdf文档

qt5的版本,qt提供了一个独立的pdf文件写入方式,那就是QPdfWriter,所以咱们当然用QPdfWriter啦。

 

正确使用的示例代码如下:

//截取软件的界面作为截图,打印到pdf里
QPixmap pix=QWidget::grab(QRect(tmp,ui->customPlot->size()));

QFile pdfFile(path);
QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile);   //实例化QPdfWriter

//设置分辨率,ScreenResolution, PrinterResolution(已经弃用),
//HighResolution(和ScreenResolution效果一样)
pdfWriter->setResolution(QPrinter::ScreenResolution);
pdfWriter->setPageSize(QPagedPaintDevice::A8);      //设置纸张为A8纸大小
//下面这行代码也是可以调整页面大小的,单位为毫米,如果加减一个大点的数,是有效果的
//pdfWriter->setPageSizeMM(QSizeF(pix.widthMM(),pix.heightMM())); 

//实例化QPainter,这里特别注意:pdf输出大小,是由这个QPainter决定的,
//所以实例化这个QPainter时,确保pdfWriter已经被设置完成,否则后面再设置的话
//是不会起作用的。要么就调用pdfWriter->newPage()函数,才会起作用,但是会新起一页了
QPainter *pic_painter = new QPainter(pdfWriter);    

//计算painter视口区域与抓取图片区域的尺寸比例因子
QRect rect = pic_painter->viewport();
//绘制时按照比例因子放大
pic_painter->scale(factor,factor);
//按照坐标画图
pic_painter->drawPixmap(0,0,pix);

delete pic_painter;
delete pdfWriter;
pdfFile.close();

//实例化QPainter,这里特别注意:pdf输出大小,是由这个QPainter决定的
//所以实例化这个QPainter时确保pdfWriter已经被设置完成,否则后面再设置的话
//是不会起作用的。要么就调用pdfWriter->newPage()函数,才会起作用,但是会新起一页了。典型的例子就是设置页面大小setPageSize或者setPageSizeMM函数设置的页面大小不起作用。

第二个问题:QPainter只能是一个实例设置到pdfWriter,不能多个实例弄上去,否则newPage()会不起作用,看这个例子:c++ 无法使用QPdfWriter在pdf文件中添加新页面 _大数据知识库

遇到这个问题的博客例子:

QPdfWriter和页面大小 - VoidCC

Qt使用QPDFWriter和QPainter生成PDF的问题_52_赫兹的鲸的博客-CSDN博客

通过QTextDocument打印到QPdfWriter

由于用QPainter打印到QPdfWriter需要自己去计算好每一个坐标(Qt 生成pdf文件_qt生成pdf_小鱼仙官的博客-CSDN博客Qt开发-ui导出pdf格式 - 知乎),挺麻烦的,所以,用QTextDocument可以支持的html直接打印上去的,所以对于格式化需求,这个就太好了,具体的参考博客:(十七)QT生成PDF文件_qt 生成pdf_sunatmine的博客-CSDN博客

Qt之生成pdf_一去二三里_新浪博客

比较好的参考博客

53.Qt-QPdfWriter绘制PDF,支持表单输出 - 走看看

QT 生成 pdf QPdfWriter_Beyond欣的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值