【第六篇】Qt学习与使用---在qt中打印PDF文件(不是生成PDF)

本文介绍了两种打印PDF文件的方法:一是通过Poppler类将PDF转换为图片再打印;二是直接调用Windows系统的打印接口进行打印。重点讲解了第二种方法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、目的

如题,打印pdf文件中的内容。

2、思路

(1)思路1:可以通过Poppler类来读取pdf中的内容,并转化成图片,再 打印这些图片。这个方法的瑕疵是,需要在打印的时候准确的写出一页图片在A4纸上的打印坐标和大小。否则会导致与原文不同。

(2)思路2:调用系统接口,让windows来打印。这个方法有一个注意点,就是传入的文件路径一定要是绝对路径。具体到哪一个磁盘开始。

3、关键代码(我是用的是思路2)





/*
这里的filename名字代表的是相对路径,在函数中,filepath是绝对路径。
*/
bool MyPrintPreViewDialog::printPDF(QString fileName)
{
    QPrinter printer;
    QString printerName = printer.printerName();
    // no default printer or no file return false
    if( printerName.size() == 0 || fileName.size() == 0)
        return false;
    QFileInfo fi(fileName);
    QString filePath = fi.absoluteFilePath();
    if(!fi.exists())
        return false;
    int ret = 0;
    ret = (int)ShellExecuteW(NULL,
                             QString("print").toStdWString().c_str(),
                             filePath.toStdWString().c_str(),
                             NULL,
                             NULL,
                             SW_HIDE);
    // if return number bigger than 31 indicate succ
    qDebug()<<"ret:"<<ret<<"--SE_ERR_NOASSOC:"<<SE_ERR_NOASSOC;
    qDebug()<<"filePath:"<<filePath.toStdWString().c_str();
    if (ret > SE_ERR_NOASSOC)
        return true;
    return false;

}

注意:

需要包含头文件:#include <windows.h>

 

4、其他

欢迎讨论!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值