使用java导出pdf文件
itextitext的使用 JasperReportsJasperReports与itext的区别Jaspersoft Studio工具简介Jaspersoft Studio的下载安装Jaspersoft Studio的使用Static TextImageParametersFields Jaspersoft Studio创建模板结合Java使用JDBC数据源方式填充数据JavaBean数据源方式填充数据itext
Apache iText 是一个开源 Java 库,支持 PDF 文档的开发和转换。itext是一个很好的工具,对于pdf的创建编辑很灵活,但是也很繁琐,所以也是简单的介绍一下itext
itext的使用
导入maven坐标
<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>4.2.2</version></dependency>
案例
Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));document.open();document.add(new Paragraph("hello itext"));document.close();
执行代码会在指定的位置输出一个test.pdf的文件,然后文件的内容就是代码中输入的内容
指定文件位置输出的test.pdf文件
test.pdf
这就是itext的介绍了,当然itext的功能远不止于此,如果想继续学习查看itext的功能,可以转到/fonks/p/15090635.html,这篇博客对itext的使用有详细的介绍
JasperReports
JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。
JasperReports与itext的区别
本篇重点介绍的是JasperReports,那么对于JasperReports与itext的区别是什么呢
Jasper是一个使用iText生成PDF的PDF库。 iText是一个用于创建和操作PDF的库。如果您的目的是生成报告,我会坚持使用Jasper。但是,如果您希望生成更多不是报告的PDF,可以查看iText库。
JasperReports更多的是需要结合工具来一起使用,使用工具Jaspersoft Studio来生成一个报表的模板文件,然后JasperReports往这个模板文件中填充数据,相比于iText简化了很多的流程与步骤。
Jaspersoft Studio
在介绍JasperReports与itext的区别的时候强调了JasperReports需要和Jaspersoft Studio工具结合起来一起使用,先介绍一下Jaspersoft Studio。
工具简介
Jaspersoft Studio是JasperReports库和JasperReports服务器的基于Eclipse的报告设计器; 它可以作为Eclipse插件或作为独立的应用程序使用。Jaspersoft Studio允许您创建包含图表,图像,子报表,交叉表等的复杂布局。您可以通过JDBC,TableModels,JavaBeans,XML,Hibernate,大数据(如Hive),CSV,XML / A以及自定义来源等各种来源访问数据,然后将报告发布为PDF,RTF, XML,XLS,CSV,HTML,XHTML,文本,DOCX或OpenOffice。
Jaspersoft Studio的下载安装
官网下载链接: /project/jaspersoft-studio/resources
下载安装完成打开之后,就是这样一个页面
熟悉eclipse的伙伴可能会觉得眼熟了,确实是这样的,不能说毫无关系吧,只能说一摸一样了
Jaspersoft Studio的使用
首先就是先创建一个模板文件
然后选择一个空白的文件即可
创建出来的文件就是一个空白的模板文件了
看红色的介绍文字可能看不明白,不打紧,这个得对照起来看才能清晰
Static Text
Static Text是一个不会变动得文本格式,可以作用与标题,我们可以把这个元素拖动到这个标题区域中来
编辑文字,字体,字号,对齐方式
然后就可以预览一下了
怎么样,是不是已经学会了呢。
Image
和上面得操作如出一辙,还是把Image元素拖到想要得位置去,然后会弹出一个框吗,我们选择URL方式呈现图片,然后把URL填入之后会加载图片,点击OK即可
可以改变大小,然后点击预览查看一下添加的图片吧
这里可能会引起大家的不适,主要是我做的这个模板太丑了,相信大家会做个比我好很多,好的,基本元素就介绍这些,还有很多需要大家去自己尝试一下,接下来创建的是动态元素
Parameters
首先还是创建一个元素参数,命名为country
然后把这个元素拖到指定位置,设置字体字号对齐方式,点击预览看看效果
这个动态的元素需要填入,填入中国之后,当然在代码中不是这么填入的
接下来就看看表格的生成吧,现在先连接数据库
Fields
填好相关数据,然后引入mysql的连接jar包,然后点击Test
这就表示连接成功了
然后根据上面创建模板的方式再创建一个demo2,但是不同的是这个Data Adapter选择我们新创建的数据连接,然后添加我们需要展示查询的sql,点击next
把需要展示的列全部移动到Fields中去,然后这个动态列表数据就是数据字段的数据了
把这些元素拖到detail区域中去,然后调整一下位置,设置格式,改列名
预览一下看看吧
这种效果对格式有要求哈,要求detail区域和Column Header区域要连在一起且File元素也要连在一起,不然就会成为这样
好的,基本介绍完成之后,现在就和java结合在一起使用吧
Jaspersoft Studio创建模板结合Java
首先是完善demo1模板,这里创建Fields元素,拖动到指定位置,设置格式,完成模板
然后把demo1.jrxml,demo2.jrxml文件复制到项目的resources的文件夹中去,前面我们已经使用Jaspersoft Studio设计了两个模板文件:demo1.jrxml和demo2.jrxml。其中demo2.jrxml的动态列表数据是基于JDBC数据源方式进行数据填充,demo1.jrxml的动态列表数据是基于JavaBean数据源方式进行数据填充
项目中引入maven坐标
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.8.0</version></dependency>
使用JDBC数据源方式填充数据
Class.forName("com.mysql.cj.jdbc.Driver");Connection connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/ele_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&","root","123456");String jrxmlPath = "D:\\project\\pdf_demo\\src\\main\\resources\\demo2.jrxml";String jasperPath = "D:\\project\\pdf_demo\\src\\main\\resources\\demo2.jasper";pileReportToFile(jrxmlPath,jasperPath);JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,map,connection);String pdfPath = "test2.pdf";JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
效果就是
JavaBean数据源方式填充数据
Class.forName("com.mysql.cj.jdbc.Driver");Connection connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/ele_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&","root","123456");String jrxmlPath = "D:\\project\\pdf_demo\\src\\main\\resources\\demo1.jrxml";String jasperPath = "D:\\project\\pdf_demo\\src\\main\\resources\\demo1.jasper";pileReportToFile(jrxmlPath,jasperPath);List<Map> list = new ArrayList();String sql = "select * from address";PreparedStatement preparedStatement = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {Map map1 = new HashMap();int id = resultSet.getInt("id");String address = resultSet.getString("address");BigDecimal electricityBill = resultSet.getBigDecimal("electricity_bill");Date createTime = resultSet.getDate("create_time");map1.put("id",id);map1.put("address",address);map1.put("electricityBill",electricityBill);map1.put("createTime",createTime);list.add(map1);}JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath,map,new JRBeanCollectionDataSource(list));String pdfPath = "test1.pdf";JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);
效果就是
感谢观看到这里