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>