Java操作PDF表单

问题描述:需要对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();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值