1.iText
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。如果是maven工程就只是需要导入其maven坐标就可以了,坐标如下:<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency>
测试代码:
import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Paragraph;import com.lowagie.text.pdf.PdfWriter;import java.io.FileNotFoundException;import java.io.FileOutputStream;public class ItextTest {public static void main(String[] args) {try {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("D:\\test.pdf"));document.open();document.add(new Paragraph("hello itext"));//输入一个段落document.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}}}
结果:
2.JasperReports
底层是基于IText,它是对其进行了封装,简化了过程
JasperReports是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。一般情况下,JasperReports会结合Jaspersoft Studio(模板设计器)使用导出PDF报表。maven坐标:
<dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.8.0</version></dependency>
测试代码
第一步:
创建maven过程,导入JasperReports的maven坐标
<dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.8.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
第二步:
将提前准备好的jrxml文件复制到maven工程中(后面会详细讲解如何创建jrxml文件),这个文件是一个模板文件,就和之前的Freemarker差不多
jrxml操作:
第三步:
编写单元测试,输出PDF报表
@Testpublic void testJasperReports()throws Exception{String jrxmlPath = "模板文件的路径(demo.jrxml)";String jasperPath = "编译后的文件的路径(demo.jasper)";//编译模板pileReportToFile(jrxmlPath,jasperPath);//构造数据,这个与模板文件里面的数据是对应的Map paramters = new HashMap();paramters.put("reportDate","-10-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@");Map map2 = new HashMap();map2.put("name","xiaoli");map2.put("address","nanjing");map2.put("email","xiaoli@");list.add(map1);list.add(map2);//填充数据JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, paramters, new JRBeanCollectionDataSource(list));//输出文件String pdfPath = "D:\\test.pdf";JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath);}
结果
这个会在上面的编译后的文件的路径(demo.jasper)这个地址下面生成一个jasper文件,然后会在String pdfPath = “D:\test.pdf”;这个位置生成一个pdf文件