Java操作pdf分为三种情况:
- 读取pdf通过坐标进行填充数据,绘制成结果pdf。
- 通过Adobe Acrobat生成pdf form,通过Java设置form表单中的元素值进行数据填充。
- 通过itext绘制pdf。
优缺点:
第一种,格式和位置较灵活,难度中;
第二种,位置在模板pdf中固定,格式也不够灵活,难度小;
第三中,格式内容位置都灵活,难度大;
引入的jar包:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.6</version>
</dependency>
第二种方式:
word制作报表样式–>转pdf–>acrobat设置pdf表单属性–>itext填充数据–>输出pdf
需要工具:excel/word , adobe acrobat Pro
1.使用word或excel绘制好想要的图形后点击另存为pdf
2.使用adobe acrobat Pro打开pdf,点击如图表单按键,选择添加或编辑域。
3.进入如图所示界面,可以对每个域进行命名、字体等属性的设置
- Java操作pdf
PdfReader reader = new PdfReader("D:\\shouju.pdf");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
/**
* 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
*/
AcroFields s = ps.getAcroFields();
//设置key-value值
//通过s.setFieldProperty("字段名", "textfont", BaseFont , null); 设置字段的格式或者在模板中修改样式
s.setField("checkNo", "20161108");
s.setField("info", "测试单位");
s.setField("projectName_1", "测试项目");
s.setField("num_1", "2");
s.setField("bw_1", "1");
s.setField("amount_1", "100000000");
s.setField("total", "壹佰万整");
s.setField("bz_1", "个");
s.setField("SKR", "测试人");
s.setField("SKDW", "测试单位");
s.setField("year", "2016");
s.setField("mouth", "11");
s.setField("day", "08");
// 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.setFormFlattening(true);
ps.close();
FileOutputStream fos = new FileOutputStream("d:\\shouju_fb.pdf");
fos.write(bos.toByteArray());
结果如图: