Qt5使用QPdfWriter方式写pdf文档

来源:互联网 发布:xin域名是什么意思 编辑:程序博客网 时间:2024/06/05 01:59

    今日,项目中要使用保存pdf文件的功能,于是打算使用Qt完成此功能。
    网上搜索了发下,网上大部分前辈使用QPrinter即打印机的方式答应pdf。
    这种方式,在qt4成为唯一的选择,然而身为qt5的版本,qt提供了一个独立的pdf文件写入方式,那就是QPdfWriter。QPdfWriter写pdf的方式,网上很少东西,因此只能去研究文档,自己写了,以下是研究后使用的方案,写出来共大家参考一下。

QString fileName;QFile pdfFile(fileName);pdfFile.open(QIODevice::WriteOnly);                 // 打开要写入的pdf文件QPdfWriter* pPdfWriter = new QPdfWriter(&pdfFile);  // 创建pdf写入器pPdfWriter->setPageSize(QPagedPaintDevice::A4);     // 设置纸张为A4pPdfWriter->setResolution(300);                     // 设置纸张的分辨率为300,因此其像素为3508X2479int iMargin = 60;                   // 页边距pPdfWriter->setPageMargins(QMarginsF(iMargin, iMargin, iMargin, iMargin));QPainter* pPdfPainter = new QPainter(pPdfWriter);   // qt绘制工具// 标题,居中QTextOption option(Qt::AlignHCenter | Qt::AlignVCenter);option.setWrapMode(QTextOption::WordWrap);// 标题上边留白int iTop = 100;// 文本宽度2100int iContentWidth = 2100;// 标题,22号字QFont font;font.setFamily("simhei.ttf");int fontSize = 22;font.setPointSize(fontSize);pPdfPainter->setFont(font);                    // 为绘制工具设置字体pPdfPainter->drawText(QRect(0, iTop, iContentWidth, 90),    QString::fromLocal8Bit("我的标题我骄傲"), option);// 内容,16号字,左对齐fontSize = 16;font.setPointSize(fontSize);pPdfPainter->setFont(font); option.setAlignment(Qt::AlignLeft | Qt::AlignVCenter);iTop += 60;pPdfPainter->drawText(QRect(0, iTop, iContentWidth, 60),    QString::fromLocal8Bit("1、目录一"));iTop += 60;// 左侧缩进2字符int iLeft = 120;pPdfPainter->drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60),    QString::fromLocal8Bit("我的目录一的内容。"), option);iTop += 60;pPdfPainter->drawText(QRect(0, iTop, iContentWidth, 60), QString::fromLocal8Bit("2、目录二"));iTop += 60;pPdfPainter->drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60),    QString::fromLocal8Bit("我的目录一的内容"), option);delete pPdfPainter;delete pPdfWriter;pdfFile.close();

运行效果如图:
运行效果图


    我同写了Python版本的QPdfWrite使用,详见 PyQt5使用QPdfWriter方式写pdf文档