1.配景
在某些业务场景中,需要提供相关的电子凭证,好比网银/付出宝中转账的电子回单,昆山软件开发,签约的电子条约等。利便用户查察,下载,打印。今朝常用的办理方案是,把相关数据信息,生成对应的pdf文件返回给用户。
本文源码:http://git.oschina.net/lujianing/java_pdf_demo
2.iText
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不只可以生成PDF或rtf的文档,并且可以将XML、Html文件转化为PDF文件。
iText 官网:http://itextpdf.com/
iText 开拓文档: http://developers.itextpdf.com/developers-home
iText今朝有两套版本iText5和iText7。iText5应该是网上用的较量多的一个版本。iText5因为是许多开拓者参加孝敬代码,因此在一些类型和设计上存在不公道的处所。iText7是厥后官目的对iText5的重构,两个版本不同照旧挺大的。不外在实际利用中,一般用到的都较量简朴,所以不消出格拘泥于利用哪个版本。好比我们在http://mvnrepository.com/中搜索iText,出来的都是iText5的依赖。
来个最简朴的例子:
添加依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.11</version> </dependency>
测试代码:JavaToPdf
package com.lujianing.test; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; /** * Created by lujianing on 2017/5/7. */ public class JavaToPdf { private static final String DEST = "target/HelloWorld.pdf"; public static void main(String[] args) throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST)); document.open(); document.add(new Paragraph("hello world")); document.close(); writer.close(); } }
运行功效:
3.iText-中文支持
iText默认是不支持中文的,因此需要添加对应的中文字体,好比黑体simhei.ttf
可参考文档:http://developers.itextpdf.com/examples/font-examples/using-fonts#1227-tengwarquenya1.java
测试代码:JavaToPdfCN
package com.lujianing.test; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; /** * Created by lujianing on 2017/5/7. */ public class JavaToPdfCN { private static final String DEST = "target/HelloWorld_CN.pdf"; private static final String FONT = "simhei.ttf"; public static void main(String[] args) throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST)); document.open(); Font f1 = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); document.add(new Paragraph("hello world,我是鲁家宁", f1)); document.close(); writer.close(); } }
输出功效:
4.iText-Html渲染
在一些较量巨大的pdf机关中,我们可以通过html去生成pdf
可参考文档:http://developers.itextpdf.com/examples/xml-worker-itext5/xml-worker-examples
添加依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker --> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.11</version> </dependency>
添加模板:template.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Title</title> <style> body{ font-family:SimHei; } .red{ color: red; } </style> </head> <body> <div class="red"> 你好,鲁家宁 </div> </body> </html>