欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

【JAVA基础】java玩转pdf,

来源: javaer 分享于  点击 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就没问题了把。




相关文章

    暂无相关文章
相关栏目:

用户点评