itext工具
在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
itext官网
The Leading PDF Library for Developers | iTextThe leading Java and C# PDF Library SDK. A programmable Java and .NET PDF SDK library to create, manipulate and edit PDF documents. Convert Html files to pdf, Debug pdf files, extract data from PDF and more.
https://itextpdf.com/en
Adobe Acrobat DC
Adobe Acrobat DC是Adobe公司的一款PDF编辑和阅读软件,可将纸质图片、文字迅速转化成PDF或文档格式,比如人们通过手机拍照,可让纸质版文字转化成电子版,用户可直接对文档进行修改。另外,通过移动端和PC端,Acrobat DC可让Excel、Word和PDF之间的相互转化更为便利。
Adobe Acrobat DC官网
实现过程
创建word文档
转化为pdf
创建表单
打开pdf用Adobe Acrobat DC的打开,然后打开工具的准备表单
修改表单的key值
表单已建立,保存到本地磁盘。
实现代码
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* itext编辑pdf
*/
public class MyItext {
public static void main(String[] args) throws IOException, DocumentException {
Map<String, String> data = new HashMap<String, String>();//要插入的数据
data.put("name", "张三");
data.put("sex", "男");
data.put("major", "计算机科学与技术");
data.put("hobby", "跑步");
data.put("phone", "1xxxxxxxxxx");
try {
// pdf模板所在路径,就是网站制作好后下载的pdf模板路径
String fileName = "D:\\\\itext\\\\itextTemplate.pdf";
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
// 使用中文字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
fontList.add(bf);
AcroFields fields = ps.getAcroFields();
fields.setSubstitutionFonts(fontList);
for (String key : data.keySet()) {
String value = data.get(key);
// 为字段赋值,注意字段名称是区分大小写的
fields.setField(key, value);
}
//必须要调用这个,否则文档不会生成的
ps.setFormFlattening(true);
ps.close();
//生成pdf路径存放的路径
OutputStream fos = new FileOutputStream("D:\\itext\\itextTemplateOutput.pdf");
fos.write(bos.toByteArray());
fos.flush();
fos.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
打开生成的pdf,数据已插入到对应的key。