1.需要用的类

pro文件添加 QT += printsupport

QPdfWriter:写pdf的类

QTextDocument:支持html表格、图片的类

2.需要打印的界面

这里示例打印两个表格,一个水平方向的,一个垂直方向的,加一张图片。

3.保存的pdf效果如下

 4.源码

添加两个表格和一张图片

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QPixmap pixmap("./qtLogo.png");ui->label->setPixmap(pixmap);ui->t1->setColumnCount(2);ui->t1->setRowCount(4);ui->t1->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"班级");ui->t1->horizontalHeader()->setStretchLastSection(true);ui->t1->setItem(0,0,new QTableWidgetItem("Tom"));ui->t1->setItem(0,1,new QTableWidgetItem("二年级"));ui->t1->setItem(1,0,new QTableWidgetItem("mary"));ui->t1->setItem(1,1,new QTableWidgetItem("一年级"));ui->t1->setItem(2,0,new QTableWidgetItem("Bob"));ui->t1->setItem(2,1,new QTableWidgetItem("二年级"));ui->t1->setItem(3,0,new QTableWidgetItem("lili"));ui->t1->setItem(3,1,new QTableWidgetItem("三年级"));ui->t2->setColumnCount(4);ui->t2->setRowCount(2);ui->t2->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"地址"<<"年龄"<<"性别");ui->t2->horizontalHeader()->setStretchLastSection(true);ui->t2->setItem(0,0,new QTableWidgetItem("Tom"));ui->t2->setItem(0,1,new QTableWidgetItem("四川成都"));ui->t2->setItem(0,2,new QTableWidgetItem("16"));ui->t2->setItem(0,3,new QTableWidgetItem("男"));ui->t2->setItem(1,0,new QTableWidgetItem("mary"));ui->t2->setItem(1,1,new QTableWidgetItem("四川成都"));ui->t2->setItem(1,2,new QTableWidgetItem("15"));ui->t2->setItem(1,3,new QTableWidgetItem("女"));
}

保存pdf槽函数

void Widget::on_pushButton_clicked()
{WPdfWriter writer;writer.exportPdf();
}
WPdfWriter类,在这个类中,为了节约时间,导出的数据都是固定的。
#include "WPdfWriter.h"
#include <QPixmap>
#include <QPainter>WPdfWriter::WPdfWriter(QObject *parent): QObject(parent){}WPdfWriter::~WPdfWriter()
{if(m_pdfWriter)delete m_pdfWriter;
}void WPdfWriter::exportPdf()
{QString path = QFileDialog::getSaveFileName(nullptr,QString("Open file"),QString("."),QString("PDF Files(*.pdf)"));if(path.isEmpty())return;if(QFileInfo(path).suffix().isEmpty())path.append(".pdf");QFile pdfFile(path);if(!pdfFile.open(QIODevice::WriteOnly | QIODevice::Append))return;m_pdfWriter = new QPdfWriter(&pdfFile);m_pdfWriter->setPageSize(QPagedPaintDevice::A4);m_pdfWriter->setResolution(QPrinter::ScreenResolution);//添加标题m_html.append("<h1 style='text-align:center;'>导出数据</h1><br />");writePdf();//添加图片m_html.append("<img src='qtLogo.png' width=\"100\" height=\"100\">");QTextDocument textDocument;textDocument.setHtml(m_html);textDocument.print(m_pdfWriter);textDocument.end();pdfFile.close();
}void WPdfWriter::addTable(const QString &title, const QString &subTitle, int rows, int cols, QList<int> colWidth, const QList<QList<QString> > &values)
{m_html.append("<table border='0.5' cellspacing='0' cellpadding='3' width:100%>");//主标题if(!title.isEmpty()){m_html.append(QString("<tr><td align='center' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(cols));m_html.append(title);m_html.append("</td></tr>");}//副标题if(!subTitle.isEmpty()){m_html.append(QString("<tr><td align='left' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(cols));m_html.append(subTitle);m_html.append("</td></tr>");}//添加字段/字段值for(int i = 0;i < rows;i++){m_html.append("<tr>");QList<QString> rowValues = values.at(i);for(int j = 0;j < cols;j++){m_html.append(QString("<td width=%1% valign='center' style='vertical-align:middle;font-size:100px;'>").arg(colWidth.at(j)));m_html.append(rowValues.at(j));m_html.append("</td>");}m_html.append("</tr>");}m_html.append("</table><br /><br />");
}void WPdfWriter::writePdf()
{///添加基本信息QList<QString> rowsValues;QList<QList<QString>> values;//导出t1rowsValues.append("姓名");rowsValues.append("班级");values.append(rowsValues);rowsValues.clear();rowsValues.append("Tom");rowsValues.append("二年级");values.append(rowsValues);rowsValues.clear();rowsValues.append("mary");rowsValues.append("一年级");values.append(rowsValues);rowsValues.clear();rowsValues.append("Bob");rowsValues.append("二年级");values.append(rowsValues);rowsValues.clear();rowsValues.append("lili");rowsValues.append("三年级");values.append(rowsValues);QList<int> width;width.append(30);width.append(70);addTable("T1主标题","T1子标题",5,2,width,values);//导出t2rowsValues.clear();values.clear();rowsValues.append("姓名");rowsValues.append("地址");rowsValues.append("年龄");rowsValues.append("性别");values.append(rowsValues);rowsValues.clear();rowsValues.append("Tom");rowsValues.append("四川成都");rowsValues.append("16");rowsValues.append("男");values.append(rowsValues);rowsValues.clear();rowsValues.append("mary");rowsValues.append("四川成都");rowsValues.append("15");rowsValues.append("女");values.append(rowsValues);width.clear();width.append(25);width.append(25);width.append(25);width.append(25);addTable("T2主标题","T2子标题",3,4,width,values);
}

如下图代码中,我直接使用的html的语法加入的图片,有如下方法也可以加入图片。

    m_pdfWriter = new QPdfWriter(&pdfFile);m_pdfWriter->setPageSize(QPagedPaintDevice::A4);m_pdfWriter->setResolution(QPrinter::ScreenResolution);//加入图片QPainter painter;painter.begin(m_pdfWriter);QPixmap pixmap("./qtLogo.png");painter.scale(10,10);   //放大10倍painter.drawPixmap(0,0,pixmap);painter.end();

Qt 导出pdf文件(表格、图片)相关推荐

  1. java 使用itext导出PDF文件,中文不显示问题解决

    之前写的java 使用itext 导出pdf 发现有个问题,在今天使用的时候,发现一个问题,就是当单元格中写中文的时候,导出来的pdf中文不显示. java 使用itext导出PDF文件,图片文字左右 ...

  2. java导出各种PDF文件(图片、表格、字体)

    java导出PDF文件(插入图片,表格,字体) 业务需求:需要根据系统里的各种数据动态生成PDF会议材料. 最终呈现图 思路 因为会议材料涉及各种数据,图片.同时还要有表格及字体样式的要求,所以需要用 ...

  3. 支持导出PDF文件并转换成图片格式的PDF查看控件Spire.PDFViewer

    Spire.PDFViewer for .NET是一款功能强大的PDF查看控件.它是由e-iceblue公司在2012年新推出的一款产品.它允许开发者从本地文件夹(File),stream和byte ...

  4. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字

    咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...

  5. 使用java导出pdf文件

    使用java导出pdf文件 itext itext的使用 JasperReports JasperReports与itext的区别 Jaspersoft Studio 工具简介 Jaspersoft ...

  6. unity利用ITextSharp实现导出pdf文件

    unity创建pdf文件首先需要搭建ITextSharp环境,先要导入所需要的dll文件.选用vs创建一个控制台项目,然后点击工具-包管理器-管理解决方案的Nuget程序包选项,如图所示: 打开包管理 ...

  7. asp.net2.0导出pdf文件完美解决方案【月儿原创】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.28 PDF简介:PDF(P ...

  8. c 将html导出pdf文件,将HTML页面转换为PDF文件并导出

    目碎前整要们开自近事端个广的的带近事端个广前,在大多数的管理系统中,都会有这样一个功能:根据相关的条件查询相应的数据,并生成可视化报表,然后可导出为PDF文件.本文只展现生成可视化报表之后导出PDF文 ...

  9. JS逐页转pdf文件为图片格式

    背景 年前的时候,开发一个电子杂志项目,功能需求是通过上传pdf文件,将其转为图片格式,所以杂志的内容其实就是一张张图片 不过当时技术要求用后端实现,所以使用的是PHP实现该功能.项目完成后,寻思着在 ...

  10. 解决word转PDF文件时图片位置改变和字体格式改变的问题

    解决word转PDF文件时图片位置改变和字体格式改变的问题 在写论文的时候,使用word编辑完文本后将其导出为PDF总是出现图片位置改变或者字体格式改变的问题,好不容易在word中编辑好的格式却不能在 ...

最新文章

  1. JS document
  2. 全球的weex资源都在这里
  3. RAID磁盘阵列的原理与搭建
  4. kali无限登录_Kali Linux没有无线网卡?玩个锤纸~
  5. 对flex-grow和flex-shrink的深入理解
  6. Quartz 第六课 CronTrigger(官方文档翻译)
  7. 测试题的答案(技术博客)
  8. 南理工计算机学院研究生课程的评价和反思(研一上)
  9. 微课--Python网络爬虫采集百度搜索结果(例4-5)
  10. 有关 vSphere 6.X 的证书及升级问题 (转)-影响等级(重要)
  11. linux 8002端口,linux – 如何限制反向SSH调整端口?
  12. UVA11233 POJ3366 HDU1804 Deli Deli【水题】
  13. 无法创建 ActiveX 组件(转载)
  14. python 模拟汽车转动
  15. 电脑新固态硬盘ssd安装win7系统教程
  16. 异常来自 HRESULT:0x80070057 (E_INVALIDARG)
  17. cygwin解压linux软件,如何在Cygwin上安装unzip | 望天博客
  18. 饱和度,对比度,锐度
  19. pip下载包报错ERROR: Could not find a version that satisfies the requirement xxxx==1.0.2 (from versions
  20. CentOS下Qt安装

热门文章

  1. 未来IT人才市场最热门的12项技能
  2. 存根类 Stub详解
  3. 18种最实用的网站推广方法大全
  4. Android Studio3.0以上 apk调试运行没有问题 apk安装运行闪退
  5. 怎么彻底卸载2345软件、怎么屏蔽2345弹窗
  6. 32位md5解密_Python 加密算法 md5
  7. 技术攻关:从零到精通
  8. 51 个漂亮的电子商务网站设计分享
  9. python图片转换成文字的手机软件_怎么把手机里的图片转换成WORD?迅捷文字识别帮你解决!...
  10. viper4android fx 驱动,ViPER4Android FX 音效驱动社区版安