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、其他
欢迎讨论!