【JAVA基础】java玩转pdf,
分享于 点击 10062 次 点评:88
【JAVA基础】java玩转pdf,
java操作pdf的工具类有很多。这里本人就只介绍pdfbox和itext了。因为这两个几乎可以解决大部分的pdf问题。好了废话不多说言归正传。
1.pdfbox解析pdf
首先导包肯定是必须的,如果是找jar包,自己百度下载,如果是maven构建:
<dependency>
<groupId>pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>0.7.3</version>
</dependency>
示例代码:
// 读取PDF文件路径
FileInputStream fis = new FileInputStream("文件路径.pdf");
// 解析PDF文件
PDFParser p = new PDFParser(fis);
p.parse();
// PDFTextStripper来提取文本
PDFTextStripper ts = new PDFTextStripper();
String s = ts.getText(p.getPDDocument());
System.out.println(s);
// 关闭读取流
fis.close();
这样就可以把pdf文件读取成文本字符串了。如果要查找内容是否存在,可以加上正则。
然后问题来了,pdfbox只能把pdf文件解析成字符串文本形式,如何生成pdf或者利用模板生成pdf。pdfbox就做不到了。itext就比pdfbox强大多了。
2.itext 生成pdf
还是一样,如果是ant构建的项目自己导jar包。maven依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>1.1.1</version>
<type>jar</type>
</dependency>
itext遍历pdf的文本域
示例:
/*打开已经定义好字段以后的pdf模板*/
PdfReader reader = new PdfReader("d:\\模板.pdf");
/*将要生成的目标PDF文件名称*/
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("d:\\iText结果.pdf"));
/*取出报表模板中的所有字段*/
AcroFields form = stamp.getAcroFields();
/*为字段赋值,注意字段名称是区分大小写的*/
for (Iterator it = form.getFields().keySet().iterator(); it.hasNext();) {
System.out.println(it.next());
}
这个就可以把pdf的文本域找出来,然后自己通过
form.setField("文本域名", "你想要放入的值");
就可以增加或者修改文本域的内容了。
stamp.setFormFlattening(true); /*必须要调用这个,否则文档不会生成的*/
问题来了,当你有一个模板的时候,然后像我这样做了,发现没有文本域,全部为空。
哈哈,这就对了。没有文本域,就自己加,文本域的名字都是可以自己定义的。
下个Adobe Acrobat ,使用这个工具自己做个模板,自己定义表单文本域,或者打开你已经有的模板,自己加文本域。然后再按照上面的方法。就可以set值到文本域了。
简单就介绍这么多,到这里使用解析pdf或者自己生成pdf就没问题了把。
相关文章
- 暂无相关文章
用户点评