问题描述:需要对pdf版的合同进行数据提取,如下图中的下划线填写的信息。
首先下载adobe acrobat pro版,最好是最新版本的,点击准备表单之后就可以看到表单域
双击表单域可以修改属性(属性名,域的大小,字体等),如果需要全部表单域统一修改属性的话,如果选择"全部选定"修改的话,可能会有问题,可以试试用鼠标拉开选定一部分的表单域,再点击其中的某个表单域进行修改属性。
java解析Pdf,一共有三种方式可以解析。
1 使用开源组织提供的开源框架 pdfbox, 特点:免费,功能强大,解析中文或许会存在乱码,格式有点乱,没有国产解析的那么美化。可以按照指定的模板,对pdf进行修改添加删除等操作,总之操作很骚,很强大。
api : https://pdfbox.apache.org/
2 使用国产的框架 Spire.PDF ,包含两种版本
免费版
https://www.e-iceblue.cn/Downloads/Free-Spire-PDF-JAVA.html
友情提示: 免费版有 10 页的页数输出限制,在输出结果文档时只能输出前10页。将 PDF 文档转换为图片、Word、HTML、XPS等格式时,仅支持转换前 10 页。如超出限制,可升级到商业版,我们仅对免费版进行不定期维护。
商业版本
https://www.e-iceblue.cn/Introduce/Spire-PDF-JAVA.html
api
http://e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html
特点:商业版本收费,免费版本有限制,可供开发人员调试,解析格式友好,解析结果是按照行显示,对pdf 图形 ,水印 ,文本, 条形码等添加增删改操作,总之个人感觉比pdfbox顺手
3 使用iTika 进行解析pdf,对中文支持不是很友好,解析的格式和pdfbox类似
api : https://tika.apache.org/
4 iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 我个人用的是iText来解析。下面的代码是一个测试类
api: http://itextpdf.com/
public class Test {
public static void main(String[] args){
extractPdf();
}
public static void extractPdf(){
String templatePath ="D:/test.pdf";
PdfReader reader;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
reader = new PdfReader(templatePath);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
List<String> valueList = new ArrayList<>();
List<String> nameList = new ArrayList<>();
java.util.Iterator<String> it = form.getFields().keySet().iterator();
while (it.hasNext()) {
String name = it.next();
String value = form.getField(name);
valueList.add(value);
nameList.add(name);
}
stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
stamper.close();
} catch (IOException e) {
e.getStackTrace();
} catch (DocumentException e) {
e.getStackTrace();
}
}
}