Qt下利用Qprinter或者QPdfWriter导出文件为PDF
2017-07-19 10:47
489 查看
由于工作中需要将应用程序的某些界面截图,并加上注释,并输出为PDF文件,在网上查阅了一些资料,整理汇总后发现有两种方法:一是Qt4版本利用QPrinter将文件输出为PDF。而是Qt5版本写新出的类QPdfWriter,更加快捷精准输出为PDF文件。两者的相同之处都是利用QPainter在其中绘制PDF文件。在Qt4版本下利用QPrinter将某个控件,或者利用QWidget::grab将控件或界面输出为PDF,详细代码及注释如下:在Qt5版本选利用QPdfWriter将Qpainter的文件输出为PDF
//利用QPrinter输出为PDF格式并设置分辨率及纸张尺寸 QPrinter pic_printer(QPrinter::ScreenResolution); //设置分辨率 pic_printer.setPageSize(QPrinter::A4); //设置纸张尺寸,默认不设置就是A4 pic_printer.setOutputFormat(QPrinter::PdfFormat); //设置输出格式pdf //用文件对话框设置输出路径 QString file_path = QFileDialog::getSaveFileName(this,"Export PDF",QString(),"*.pdf"); if(!file_path.isEmpty()) { //如果没有写后缀就自动加上 if(QFileInfo(file_path).suffix().isEmpty()) file_path.append(".pdf"); pic_printer.setOutputFileName(file_path); //设置文件名 /*****************************************绘制图片*****************************************/ QPixmap pixmap=QWidget::grab(QRect(ui->qcustomplot->x(),ui->qcustomplot->y(),ui->qcustomplot->frameGeometry().width(),ui->qcustomplot->frameGeometry().height()+10)); //抓取界面widget区域,可以抓取任意控件区域,Qt5推荐新的API QWidget::grab QPainter pic_painter; pic_painter.begin(&pic_printer); //在QPrinter上绘图 QRect rect=pic_painter.viewport(); //获取painter的视口区域 int factor=rect.width()/pixmap.width(); //计算painter视口区域与抓取图片区域的尺寸比例因子 pic_painter.scale(factor*0.6,factor*0.6); //绘制时按照比例因子放大 pic_painter.drawPixmap(10,10,pixmap); //按照坐标画图
/***********************以下可利用QPainter自定义绘图**************************************/ } else QMessageBox::warning(this,tr("Path"),tr("You did not select any file."));/**********************************************Qt5版本QPdfWriter*****************************************************/
QString path = QFileDialog::getSaveFileName(this,tr("Open File"),".",tr("PDF Files(*.pdf)")); //利用QFileDialog对话框选择文件存储路径 if(!path.isEmpty()) { //如果没有写后缀就自动加上 if(QFileInfo(path).suffix().isEmpty()) path.append(".pdf"); //实例化该文件,并以只写的方式打开 QFile pdfFile(path); if(!pdfFile.open(QIODevice::WriteOnly)) { QMessageBox::warning(this,tr("write File"),tr("Cannot open file:\n%1").arg(path)); return; } QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile); //实例化QPdfWriter QPainter *pic_painter = new QPainter(pdfWriter); //实例化QPainter pdfWriter->setPageSize(QPagedPaintDevice::A4); //设置纸张为A4纸 pdfWriter->setResolution(QPrinter::ScreenResolution); //设置分辨率 /******************************************************以下为自定义绘图**************************************/ delete pic_painter; delete pdfWriter; pdfFile.close(); } else QMessageBox::warning(this,tr("Path"),tr("You did not select any file."));
相关文章推荐
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
- 利用itextsharp.dll 导出pdf格式文件
- 如何利用eclipse和一些调试技巧来找到程序错误所在和从模拟器里面导出文件或者导入文件等
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- 利用iText导出pdf文件
- Qt利用QGraphicsScene编写Word排版工具导出PDF
- 利用程序将.jrxml导出为.jasper文件并用PDF显示(2)
- 在winform中利用外部程序打开pdf或者word等文件的方法
- php利用header导出.doc或者.xls文件
- Qt中导出.txt, .xls, .xlsx, .pdf文件小结
- 利用pig导出hbase文件为txt或者csv格式
- 文本导出到pdf文件(使用QPrinter和QPainter和QTextDocument)
- 利用datawindow或者datastore的saveas方法导出excell文件,然后修改中文表头
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
- Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title乱码问题
- html5系列:利用html5 file api读取本地文件(如图片、PDF等)
- 在 Qt 的 .pro 中定义拷贝文件或者文件夹