目录
1.结果展示
2.实现说明
本例输出多页PDF文档主要由QPrinter和QPainter实现,原理是使用QPainter在QPrinter的区域中绘制各种文字、图片、表格等需要打印的类容。使用QPainter的begin(&printer)方法开始绘制,中间使用QPrinter的newPage()方法新建页面并绘制形成多页PDF,最后使用QPainter的end()方法结束绘制。输出PDF使用QPrinter的setOutputFileName(路径/文件名)方法将PDF文档保存到指定文件夹中。
此处只展示了绘制文字,若需绘制其它类容,如图片、表格,使用QPainter绘制图片和线段即可实现,绘制中需注意QPrinter中的区域尺寸,预留好合适的页边距,防止绘制超出边界。想要使输出的PDF文档中格式工整好看,其主要还是要靠QPainter的绘制,如果对QPainter的绘制掌握熟练并且经验丰富,可实现输出非常精美的PDF文档。
3.关键代码展示
项目.pro文件中需添加:QT += printsupport
头文件outputpdf.h代码如下:
#ifndef OUTPUTPDF_H
#define OUTPUTPDF_H
#include <QWidget>
#include <QtPrintSupport/QPrinter>
#include <QPainter>
QT_BEGIN_NAMESPACE
namespace Ui { class OutputPDF; }
QT_END_NAMESPACE
class OutputPDF : public QWidget
{
Q_OBJECT
public:
OutputPDF(QWidget *parent = nullptr);
~OutputPDF();
private slots:
void on_pushButton_clicked();
private:
Ui::OutputPDF *ui;
};
#endif // OUTPUTPDF_H
源文件outputpdf.cpp代码如下:
#include "outputpdf.h"
#include "ui_outputpdf.h"
OutputPDF::OutputPDF(QWidget *parent)
: QWidget(parent)
, ui(new Ui::OutputPDF)
{
ui->setupUi(this);
}
OutputPDF::~OutputPDF()
{
delete ui;
}
void OutputPDF::on_pushButton_clicked()//按钮点击事件中为打印输出代码
{
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);//A4纸大小
printer.setResolution(300);
printer.setOutputFormat(QPrinter::PdfFormat);//PDF格式
printer.setOutputFileName(QString::fromLocal8Bit("C:/Users/Administrator/Desktop/Qt输出多页PDF文件示例.pdf"));//输出到桌面
QPainter painter;
painter.begin(&printer);//开始在打印区域上绘制类容
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setFont(QFont("Arial",40));
painter.drawText(printer.width()/2-800,600,QString::fromLocal8Bit("QT输出PDF示例第1页"));
for(int i=2;i<7;i++)
{
printer.newPage();//新建2-6页
painter.drawText(printer.width()/2-800,600,QString::fromLocal8Bit("QT输出PDF示例第") + QString::number(i) + QString::fromLocal8Bit("页"));
}
painter.end();//绘制结束
}
4.文件下载
与此文章对应的QT项目源代码和打包文件夹在下方下载路径中,包含项目源代码和打包好的文件夹,打开打包文件夹中的执行文件可测试看到运行结果。