十、Qt 操作PDF文件

 《一、QT的前世今生》

《二、QT下载、安装及问题解决(windows系统)》
《三、Qt Creator使用》 ​​​

《四、Qt 的第一个demo-CSDN博客》

《五、带登录窗体的demo》

《六、新建窗体时,几种窗体的区别》 

《七、Qt 信号和槽》 
八、Qt C++ 毕业设计

九、Qt C++ 数据库开发

十、Qt 操作PDF文件-CSDN博客

一、下载Poppler开源库

使用Poppler第三方开源库,下载地址:Poppler,我下载的是最新版的poppler-24.01.0

poppler-24.01.0压缩包文件下载后需要自行编译,生成可用的类库。如果Poppler解析出来的PDF文件无法正常显示中文,需要将poppler-data-0.4.12包里的相关文件拷贝到指定目录下,才能正常显示中文。我的中文显示正常,所以我没有下载poppler-data-0.4.12包。

也可以下载从Poppler Win32 download | SourceForge.net 下载windows下直接可用的dll库,但是上边的poppler-24.01.0压缩包还是需要下载的,因为头文件在此包中。

二、搭建环境

在程序目录下新建poppler文件夹,我把公用的类库都放到了CommDEV文件夹下

将poppler-24.01.0压缩包中的 \qt5\src 文件夹下的所有文件拷贝到上边新建的poppler文件夹中。因为像poppler-qt5.h对应的是poppler-qt5.dll,在写程序时都要用到。

将poppler-0.39.0-win32包解压缩后的libpoppler.dll,libpoppler-qt5.dll和lib文件夹下的libpoppler.dll.a,libpoppler-qt5.dll.a

这4个dll拷贝到程序所在的目录下的poppler文件夹内。

以上步骤操作大家仔细看,别把文件放错了地方。

三、配置pro文件

以下标红的地方需要注意,我们是在windows系统下开发,没有用的咱们不选。

再按以上的步骤添加另一个dll

添加完的pro文件里多出了以下这些代码

表示添加成功。

四、开始写代码

引用头文件

#include "poppler-qt5.h"

编写代码

QString filename=QFileDialog::getOpenFileName(this,QString::fromUtf8("打开"),"","pdf file (*.pdf)");//获取pdf文件路径

if(filename.isEmpty()){

return;//如果文件路径为空则返回

}

Poppler::Document* document = Poppler::Document::load(filename);//加载pdf文件

if (!document || document->isLocked()) {

QMessageBox::information(this,"提示",QString::fromUtf8("无法打开文件:%1").arg(filename));//如果加载不成功,输出错误信息,并返回

delete document;

return;

}

//再次检查document是否可用

if (document == 0) {

// ui->label_message->setText(QString::fromUtf8("文件内无内容:%1").arg(filename));//不可用则输出错误信息,并返回

return;

}

//将PDF文档的每一页输出为QImage

// for(int pageNumber=0;pageNumbernumPages();pageNumber++){

//获取指定页码的页面,页码从0开始

Poppler::Page* pdfPage = document->page(0);

if (pdfPage == 0) {

qDebug()

return;

}

//将页面内容转换为QImage

QImage image = pdfPage->renderToImage();

// double xres=72.0, yres=72.0; int x=-1, y=-1, width=-1, height=-1;

// QImage image = pdfPage->renderToImage(xres, yres, x, y, width, height);

// if (image.isNull()) {

// qDebug()

// return;

// }

// 在QLabel中显示QImage

QLabel *label = new QLabel(this);

label->setPixmap(QPixmap::fromImage(image));

ui->horizontalLayout->addWidget(label);

//使用完后记得释放掉Poppler::Page* pdfPage

delete pdfPage;

// }

delete document;

如果在编译程序时出现错误,缺少poppler-export.h,可从以下连接下载

https://download.csdn.net/download/zhouhui1982/88747128

运行效果

目前只能显示第一页的pdf内容,在下一章节中,我们再来细化pdf的相关操作,比如滚动条,下一页,上一页按钮等。以前打包依赖库,支持可以单独运行的程序。

### 回答1: 使用Qt打印PDF文件可以通过以下几个步骤实现: 1. 导入所需的Qt文件,如QtWidgets和QtPrintSupport。 2. 创建一个Qt应用程序,并初始化QtPrintSupport模块。 3. 打开PDF文件,可以使用QFile和QIODevice打开。 4. 创建一个QPrinter对象作为打印机。 5. 设置打印机的相关属性,如打印格式、纸张大小、页面方向等。 6. 创建一个QPainter对象,将其绑定到QPrinter上。 7. 使用QPainter将PDF文件的内容绘制到打印机上,可以使用QPdfDocument或QPdfPage来读取和渲染PDF页面。 8. 打印完毕后,结束绘制并释放资源。 以下是一个示例代码片段,演示如何使用Qt打印PDF文件: ``` #include <QtWidgets> #include <QtPrintSupport> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 初始化QtPrintSupport模块 QPrinter printer(QPrinter::HighResolution); printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName("output.pdf"); printer.setPageSize(QPrinter::A4); // 打开PDF文件 QFile file("input.pdf"); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Failed to open PDF file."; return -1; } // 创建一个QPainter对象,将其绑定到打印机上 QPainter painter(&printer); // 使用PDF页面来渲染和打印PDF内容 QPdfDocument pdfDoc; if (pdfDoc.load(&file)) { for (int i = 0; i < pdfDoc.pageCount(); ++i) { QPdfPage page = pdfDoc.page(i); QRectF pageSize = page.pageSize(); // 将PDF页面绘制到打印机上 painter.drawImage(pageSize, page.renderToImage()); printer.newPage(); } } else { qDebug() << "Failed to load PDF document."; return -1; } // 打印完毕,结束绘制并释放资源 painter.end(); file.close(); return app.exec(); } ``` 通过以上步骤,你可以使用Qt来打印PDF文件。 ### 回答2: 使用Qt打印PDF文件可以通过使用QPrinter类实现。以下是一个简单的示例代码: ``` #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建一个QPrinter对象 QPrinter printer; // 设置打印机输出格式为PDF printer.setOutputFormat(QPrinter::PdfFormat); // 设置打印机输出路径和文件名 printer.setOutputFileName("output.pdf"); // 创建一个QPainter对象,用于绘制打印内容 QPainter painter(&printer); // 绘制打印内容,可以使用painter的各种绘制函数进行绘制 // 结束绘制 painter.end(); // 打印完成 QApplication::processEvents(); return 0; } ``` 在上述示例代码中,我们首先创建了一个QPrinter对象,并设置了输出格式为PDF,同时指定了输出路径和文件名。然后我们创建了一个QPainter对象,并将其与QPrinter对象关联起来,通过调用painter的绘制函数进行绘制。最后,我们完成绘制,并调用QApplication的processEvents函数,确保打印完成。 ### 回答3: 使用Qt打印PDF文件的步骤如下: 1. 首先,我们需要安装Qt开发环境,并确保我们可以成功编译和运行Qt应用程序。 2. 然后,我们可以使用Qt提供的QPrinter类来打印PDF文件。在打印PDF文件之前,我们需要创建一个QPrinter对象,并设置相关属性。 3. 创建一个QPrinter对象后,我们可以设置打印机的一些属性,例如打印的页面大小、分辨率、纸张方向等。可以使用QPrinter类的成员函数来设置这些属性。 4. 接下来,我们需要创建一个QPrintDialog对象,并设置相关属性。QPrintDialog类提供了一个打印对话框,使用户可以选择打印机、打印范围等。 5. 打开打印对话框后,我们可以使用exec()函数显示该对话框,并等待用户选择打印设置。 6. 如果用户选择了打印设置并确认打印操作,我们可以使用QPrinter类的成员函数来执行打印操作。例如,可以使用QPrinter的setOutputFileName()函数来设置打印输出的PDF文件名。 7. 打印PDF文件后,我们可以根据需要进行一些清理工作。例如,关闭打印对话框、释放打印机资源等。 通过以上步骤,我们可以使用Qt来打印PDF文件。使用Qt打印PDF文件是一个相对简单的过程,只需几行代码即可实现打印功能。对于需要打印PDF文件的应用程序开发而言,Qt提供了简洁、易用的API,并且支持跨平台。因此,使用Qt打印PDF文件是一种高效和方便的方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周不易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值