1>方法一Itext来实现生成文档这个pdf的文档

1.使用Itext来实现生成我都这个PDF的文档,代码如下

 public static void main(String[] args) {try {Document document = new Document();//用来获得我都这个document对象来实现获得我都这个文档对象PdfWriter.getInstance(document,new FileOutputStream(new File("D:\\cs\\test.pdf")));//用来引入我当前的这个pdf的路径document.open();//打开我当前的这个文档对象sdocument.add(new Paragraph("你好"));//在我都这个文档对象中添加我需要插入的文档信息document.close();//关闭我都这个资源} catch (Exception e) {e.printStackTrace();}}

2>方法二使用JasperReports来生成我的这个来实现生成PDF

JasperReports就是基于itext来实现生成PDF文档的

在使用JasperReports的时候我需要引入我当前的这几个依赖包

<dependencies><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.8.0</version><exclusions><exclusion><groupId>com.lowagie</groupId><artifactId>itext</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency>
</dependencies>

我的这个实现代码

 /*** 用来编写JasperReports测试方法*/@Testpublic void test1() throws Exception{String jrxmlPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\demo.jrxml";//得到我的这个模板文件String jasperPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\demo.jasper";//获得我的这个jasper的文件//编译模板JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);//构造数据Map paramters = new HashMap();paramters.put("reportDate","2022-03-10");paramters.put("company","itcast");List<Map> list = new ArrayList();Map map1 = new HashMap();map1.put("name","xiaoming");map1.put("address","beijing");map1.put("email","xiaoming@itcast.cn");Map map2 = new HashMap();map2.put("name","xiaoli");map2.put("address","nanjing");map2.put("email","xiaoli@itcast.cn");list.add(map1);list.add(map2);//填充数据JasperPrint jasperPrint =JasperFillManager.fillReport(jasperPath, paramters, new JRBeanCollectionDataSource(list));//输出文件String pdfPath = "D:\\test.pdf";JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);}

JasperReports的一个执行原理,架构图

他的参数的名称以及用处

JRXML:报表填充模板,本质是一个xml文件

Jasper:由JRXML模板编译成的二进制文件,用于代码填充数据

Jrprint:当用数据填充完Jasper后生成的对象,用于输出报表

Exporter:报表输出的管理类,可以指定要输出的报表为何种格式

PDF/HTML/XML:报表形式

3>用来获得我当前的这个报表模板

其实在使用JasperReports的时候我在导入我的这个报表模板的时候其实并不是我们手写,他主要是借助了我的这个相关的工具来实现自动生成的,然后我们需要借助一个软件Jaspersoft Studo的这个工具的软件,通过可视化的形式来得到我的这个软件

这个软件的下载地址:

Download Jaspersoft Business Intelligence Suite | Jaspersoft Community

下载这个

打开这个软件之后就会显示这个界面

选择我当前的newproject的时候就会显示我一下的这个界面,选择我的这个东西点击next

输入我的这个工程名点击finish,完成创建

创建完成之后右击我的这个模块,创建我的这个Jasper Resport的模板文件

然后就会显示一下的这个界面

直接选择我的这个A4,然后点击next之后就会显示我的这个界面,用来填入我的这个模板的名字

然后选择我的这个DB数据库类型,第一个是为空的,我们暂时可以先不选择

然后点next最后在点finish,来完成创建

然后就会显示这个中间这一块就是我们的这个PDF生成之后的一个区域,然后他这里一共有三种视图模式

我们可以通过在这个区域来实现获得我的这个pdf的控件 当我拖动我当前的这个文件之后我可以选择我的这个图片显示的位置,我编辑的就是我使用URL地址来实现展示,然后输入我的这个图片的url地址,我当时是使用的七牛云上面的那个图片路径

下一步用来输出我当前的这个日期,展示我们的这个日期控件

如果需要动态的显示我的这个文本的内容的话我需要自定义一个文本

然后直接选中我的这个信息,然后点击我的这个preview的时候他会要你自定义我的这个文本内容

然后就会在我的这个文本上面展示这种文本一般只是用来展示很小的数据,如果有很多的数据的话那么我就需要用到Fileds来便利渲染我的这个数据

使用Fields空间来实现我的数据的循环展示,这个空间它支持两种形式的数据显示,第一种就是使用JDBC来数据动态展示,第二种就是使用我的这个JavaBean的方式来渲染数据,创建我的这个链接对象

读取数据库中的数据

方法一:使用JDBC的驱动来获取数据

然后选择我的这个jdbc的连接池对象

选择之后然后进行相关的配置

选择我的这个Mysql的驱动包,注意我的这个驱动包一定要是8.0以上的版本

然后配置我的这个Mysql的时区

erverTimezone 和GMT+8

创建完之后我需要右击我这个demo的outline然后来使用sql来查询我需要查找的数据

在这里选择我们刚刚创建 数据库

然后编写我的这个sql文件然后我的这个数据和字段全部都会显示出来

执行完sql之后我刚刚查询出来的字段就会显示出来,如果需要展示的话我可以直接把我的这个fields的字段直接拖动到我的这个试图上面来使用即可

拖动完成之后就会显示我的这些相关的套餐信息

注意事项

我们在预览的时候没有我们的这个表格边框那么我们因该去设置我们的一个pdf文档里面的数据来设置一个边框,来进行展示,首先雪中我需要设置的那个方块,步骤如下

我们去看一下效果

那么我们的这个数据行与行之间存在空隙,那么如何解决呢,我们可以直接去设置我们的那个模块宽度

我们把空隙弄到最小,然后就是一个完整的表格了

然后点击source得到我的这个jrxml文件,然后在我的这个idea当中运行生成PDF文件

方法二.使用我的这个JavaBean的方式来展示我的数据

1.在使用JavaBean的话我们就不需要按照上面的方法来实现去导入我的这个数据库的数据,但是我们需要在这个工具当中手动的创建我的这个Fileds,但是需要注意的是我的这个Fileds的名字要和我的这个后台的这个实体类名字好符合一直,然后我们仍然还是可以把我的这个Fileds来拖动到我的这个Design上面来

在使用JavaBean的方式来调用来生成这个模板的话他是无法进行预览的需要通过使用我们代码的方式给我们的这个数据来进行填充注意我的这个文字必须要是华文宋体格式的,然后我这里会有相关的配置文件,否则代码无法识别 ,注意我的这个字体需要自己在文本框中输入华文宋体

这是我们相关的jrxml文件,将这个文件的内容拷贝到我们的idea当中

【1】使用代码的方式来生成JDBC形式的PDF文件

他的Java代码如下

  /*** 因为我当前需要通过我的这个文件中的sql语句去查询我的数据库当中的数据,所有我们需要引入我的                    jdbc的代码* 用来根据文档这个Drug的jrxml文件来读取文档这个信息,然后生成pdf文件,* 然后以流的方式来把文件输出到我的电脑磁盘当中*/@Testpublic void test2() throws Exception {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/health?" +"serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8", "root", "roots");//得到我的这个数据库的连接对象String jrxmlPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\Drug.jrxml";//得到我的这个模板文件String jasperPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\Drug.jasper";//获得我的这个jasper的文件//得到我的这个模板编译对象,把我的这个模板文件和我的这个生成的jasper的二进制文件指定我的相关的路径JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);//为我的这个模板文件生成我的这个二进制文件Map map = new HashMap();map.put("company","套餐管理");//他的这个key的是我当前的这恶个jrxml文件中定义好的这个标题字段名称map.put("Text","nice");//他的这个key的是我当前的这恶个jrxml文件中定义好的这个字段名称/*下一步我们就需要用来进行编译数据了,那么我的这个填充数据的话它的这个对象中的参数的意思是一下几个第一个参数就是我们的这个编译之后的这个文件的路径变量第二个参数就是我需要填充的这个map集合第三个参数就是我们的这个数据源,来实现我们的这个jrxml文件中的sql语句,来查询我的数据库中的书*/JasperPrint print = JasperFillManager.fillReport(jasperPath, map, connection);//然后把我们的这个pdf文件来进行输出String pdfPath = "D:\\Drug.pdf";//把我们的这个JasperPrint的对象和我的这个pdf的路径放入到我的这个输出文件的对象当中JasperExportManager.exportReportToPdfFile(print,pdfPath);}

把这些代码放入到我们的这个idea中来进行生成pdf

如果在我的这个代码运行的过程中如果说出现了一下错误

这三个文件中的ttl和我的这个xml文件需要装在名字为stsong的文件夹里面否则无法识别

文件见百度网盘

链接:https://pan.baidu.com/s/1rzc86-irjv7ARelhshOJHw 
提取码:GFDS

【2】使用代码的方式来实现JavaBean模式的PDF文件

使用JavaBean的方式来生成PDF它的方式主要是通过我的这个集合的方式来把我的这个数据分装成一个list集合如果说有多条数据的话那么我就可以使用一个list集合里面存入多个Map集合,它key就是我的这个分装的字段名称就是我的这个控件的名称

 /*** 因为我当前需要通过我的这个文件中的我们需要使用我们的这个JavaBend的实体类来获得我的这些相关的数据* 用来根据文档这个Drug的jrxml文件来读取文档这个信息,然后生成pdf文件,* 然后以流的方式来把文件输出到我的电脑磁盘当中*/@Testpublic void test3() throws Exception {String jrxmlPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\Drug2.jrxml";//得到我的这个模板文件String jasperPath ="D:\\springbootWeb\\Vue+Springboot\\health_parent\\JasperReports\\src\\main\\resources\\Drug2.jasper";//获得我的这个jasper的文件//得到我的这个模板编译对象,把我的这个模板文件和我的这个生成的jasper的二进制文件指定我的相关的路径JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);//为我的这个模板文件生成我的这个二进制文件Map map = new HashMap();map.put("company","套餐管理");//他的这个key的是我当前的这恶个jrxml文件中定义好的这个字段名称map.put("Text","nice");//我们使用JavaBean的方式来实现数据填充的话那么我们就需要用到我的这个List集合了/*它的一个实现方法是这样的:首先我们可以先定义一个list集合,然后再定义两个Map集合,那么我的map集合里面的key要和我的这个jrxml中的文字的控件的名字要一样,否则在编译的时候这个文件无法找到相对应的字段然后将我们的这两个集合放到我的这个list集合里面最终放到我们的 这个填充数据的这个对象里面*/List<Map> Drug = new ArrayList<>();//定义一个list集合Map mapDurg1 = new HashMap();//map集合,存入到套餐信息mapDurg1.put("name","老年人套餐");//存入我的这个套餐名称mapDurg1.put("code","001");//存入我的这个套餐编号mapDurg1.put("age","50-60");//存入我的这个适用年龄mapDurg1.put("sex","1");//存入我的这个适用性别,0代表女,1代表男Map mapDurg2 = new HashMap();//按照上面的套路一样,存入我的第二个套餐数据mapDurg2.put("name","学生视力体检套餐");//存入我的这个套餐名称mapDurg2.put("code","002");//存入我的这个套餐编号mapDurg2.put("age","6-18");//存入我的这个适用年龄mapDurg2.put("sex","0");//存入我的这个适用性别,0代表女,1代表男//最终把我Map集合存入到我的这个list集合中,只包含我的这个JavaBean中的这个数据的map结合Drug.add(mapDurg1);Drug.add(mapDurg2);/*下一步我们就需要用来进行编译数据了,那么我的这个填充数据的话它的这个对象中的参数的意思是一下几个第一个参数就是我们的这个编译之后的这个文件的路径变量第二个参数就是我需要填充的这个其他字段的map集合第三个存入我的这个JavaBean的这个list集合*/JasperPrint print = JasperFillManager.fillReport(jasperPath,map,new JRBeanCollectionDataSource(Drug));//然后把我们的这个pdf文件来进行输出String pdfPath = "D:\\Drug2.pdf";//把我们的这个JasperPrint的对象和我的这个pdf的路径放入到我的这个输出文件的对象当中JasperExportManager.exportReportToPdfFile(print,pdfPath);}

使用itext和JasperReports生成PDF文档相关推荐

  1. iText框架(生成pdf文档)

    1.创建一个itext的简单示例 a.导包(pom.xml文件) <dependencies><dependency><groupId>com.lowagie< ...

  2. itext生成pdf文档加载中文字体解决方法

    最近接手一个任务,在网页中通过用户的输入的信息生成一个pdf文档并且下载到用户本地.iText是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML. ...

  3. 【教程】如何使用Java生成PDF文档?

    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享.而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行.下面,我们 ...

  4. java pdf 首行缩进_java使用iText生成pdf文档的对齐方式

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  5. Java生成PDF文档 iText使用PDF模板一

    最近在弄这个java生成pdf,哎,在网上查找了各种各样的学习资料,弄了几天,今天终于把这个效果简单的弄出来,所以,也把这个,我所走过的坑,作一个记录,提供接下来需要学习的人. 参考文献文档:http ...

  6. java使用iText生成pdf文档的对齐方式

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  7. Java:iText生成pdf文档

    依赖 <!-- pdf:start --> <dependency><groupId>com.itextpdf</groupId><artifac ...

  8. java pdf 中文_java-pdf-itext 生成pdf 文档(支持中文字体)

    java-pdf-itext 生成pdf 文档(支持中文字体) itext 版本:2.1.7 package com.demo.preview; import java.io.ByteArrayOut ...

  9. java pdf_Java 生成 PDF 文档

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XM ...

最新文章

  1. 高性能的MySQL(6)查询慢与重构查询
  2. springboot整合mybatis分页插件
  3. textureview 旋转90度后平铺_轮滑知识 | 单排轮滑的旋转技巧
  4. Leetcode 105. 从前序与中序遍历序列构造二叉树 解题思路及C++实现
  5. 熊谢刚:AI和5G让容联·云通讯弯道超车
  6. 值得拥有!精心推荐几款超实用的 CSS 开发工具
  7. linux 认证考试 题库,Linux认证考试题库及答案
  8. java ask to_Java native和ASCII 互转工具Native2AsciiUtils.java下载
  9. 原动力CMS PHP域名授权系统V3.0
  10. 【Python3网络爬虫开发实战】1.4.2-MongoDB安装
  11. Webpack-simple cross-env 不是内部或外部命令问题处理
  12. 用于 Domino Web Access 的 Notes.ini 变量
  13. php环境安装教程,PHP运行环境配置与开发环境的配置(图文教程)
  14. 仿支付宝手势密码解锁
  15. RTKlib单点定位-部分思考
  16. Windows python pip换源不生效(window11系统),以及pip下载库包报错 because normal site-packages is not writeable
  17. 计算机安全中采用的用户身份验证技术主要有,探究用户身份认证技术在信息安全中运用的意义...
  18. github python100天_GitHub - CherryXuan/Python-100-Days: Python - 100天从新手到大师
  19. recoil error Cannot assign to read only property of object ‘#‘
  20. 吃什么怎么吃关系着民族的命运

热门文章

  1. Lip Reading Sentences in the Wild(2017)
  2. Sublime text 2和3 修改字体 | 修改主题
  3. 数学英语不好可以想计算机吗,高中数学和英语不好可以学计算机专业吗
  4. CCIE自学-by闫辉NP视频:QoS小结
  5. 计算机桌面应用程序图标不见了怎么办,我的电脑图标不见了怎么办 图标消失解决方法...
  6. flex4/air 护眼健康卫士(源码/air安装包)
  7. [LeetCode]67.Add Binary
  8. 延长数据中心使用年限的低成本方法
  9. 【金融量化】每一个优秀交易员注定是孤独的
  10. 基于JAVA餐厅座位预约系统设计与实现 开题报告