Qt读写pdf文件

一、生成pdf(来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.html

Qt中如何让图片、文本、HTML或者其他形式的内容生成pdf呢?主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式的文件。

1、使用图片生成pdf

代码如下:

QPrinter printer_pixmap(QPrinter::HighResolution);
printer_pixmap.setPageSize(QPrinter::A4);  //设置纸张大小为A4
printer_pixmap.setOutputFormat(QPrinter::PdfFormat);  //设置输出格式为pdf
printer_pixmap.setOutputFileName("E:\\test_pixmap.pdf");   //设置输出路径
QPixmap pixmap = QPixmap::grabWidget(main_widget, main_widget->rect());  //获取界面的图片

QPainter painter_pixmap;
painter_pixmap.begin(&printer_pixmap);
QRect rect = painter_pixmap.viewport();
int multiple = rect.width()/pixmap.width();
painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
painter_pixmap.drawPixmap(0, 0, pixmap);  //画图
painter_pixmap.end();

效果如下:
在这里插入图片描述

2、使用文本生成pdf
代码如下:

QPrinter printer_text;
printer_text.setOutputFormat(QPrinter::PdfFormat);
printer_text.setOutputFileName("E:\\test_text.pdf");
QPainter painter_text;
painter_text.begin(&printer_text);

QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");

QPoint point(10, 10);
for(int i=1; i<=5; i++)
{
QString message = QString("%1        %2        %3").arg(QString::number(i)).arg(current_date).arg(QStringLiteral("北京"));
int y = point.y();
point.setY(y+20);
painter_text.drawText(point, message);
message.clear();
}
//printer_text.newPage();  //生成新的一页,可继续插入
painter_text.end();

效果如下:
在这里插入图片描述

使用HTML生成pdf

此处请查看原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.html

二、读pdf文件

qt的QPrinter库只能实现pdf的写入(没有具体看源代码),如果需要读取pdf,比如做一个pdf阅读器,可使用第三方的qt库-Poppler Qt5。

Poppler Qt5官网链接:https://people.freedesktop.org/~aacid/docs/qt5/

基本说明(个人简单翻译):

Poppler Qt5库
libpopler-Qt5,是一个适用于Qt5程序加载和展现PDF文件的第三方库,接口简单易用,且使用者完全不需要知道它内部实现方法。
目前来说该库还未出过什么bug,结实可靠(库的作者自吹。。。)
最后就是使用方法,可以去官网简单看一下。

在这里插入图片描述
Poppler Qt5的具体使用还是可以查看其它博文:
1、https://blog.csdn.net/yinyuchen1/article/details/77979965?utm_source=blogxgwz8
2、https://blog.csdn.net/milujun/article/details/22827431

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值