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

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、其他

欢迎讨论!

猜你喜欢

转载自blog.csdn.net/Kshine2017/article/details/81776161