Qt5使用QPdfWriter方式写pdf文档

    今日,项目中要使用保存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);     // 设置纸张为A4
pPdfWriter->setResolution(300);                     // 设置纸张的分辨率为300,因此其像素为3508X2479

int 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;

// 文本宽度2100
int 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();

运行效果如图:
Qt5使用QPdfWriter方式写pdf文档_第1张图片


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

你可能感兴趣的:(Qt5使用QPdfWriter方式写pdf文档)