欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过模板生成pdf文件(一页或多页)-java

程序员文章站 2024-03-08 14:40:46
...

流程

1.使用Adobe acrobat pro(pdf编辑工具)创建pdf表单模板文件。
2.Java(使用itext的jar包)获取并填充表单。

创建表单

1.使用Adobe acrobat pro打开需要作为模板的pdf文件,空的有内容的都可以,具体看自己需求吧,我这里打开的是一个空的pdf。
2.点击右上角工具-表单-编辑,进入表单编辑页面。
3.点击添加新域,有很多组件可以选择。通过模板生成pdf文件(一页或多页)-java
4.在页面需要填充数据的地方选择相应的组件,文本域的名称就是一会需要填充的表单的键值,也就是标识。我写的例子是一个发票的pdf,用的都是文本域(这些表单的域用pdf正常打开是看不到的,只有在这个表单编辑页面才可以看到,所以现在模板看起来还是空的)。
通过模板生成pdf文件(一页或多页)-java
5.完事保存。

填充数据

1.导包,需要用到itext包
(1)自己导入,这是我使用的jar包,0积分下载即可,itext-4.2.0
(2)pom方式,这个版本是比较新的

		<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.3</version>
        </dependency>  

2.开始代码部分

public class Main {

    public static void main(String[] args) throws IOException, DocumentException {
        //pdf模板路径
        String TemplatePDF = "src/com/company/peinvoice.pdf";
        //生成pdf路径
        String temp = "src/com/company/peinvoice_temp.pdf";
        FileOutputStream fos = new FileOutputStream (temp);
        //用于存储每页生成pdf流
        ByteArrayOutputStream baos[] = new ByteArrayOutputStream[2];

        //3页pdf所以直接循环3次,填充各个表单数据
        for (int i=0;i<2;i++){
            //获取表单
            baos[i] = new ByteArrayOutputStream();
            PdfReader reader = new PdfReader(TemplatePDF);
            PdfStamper stamp = new PdfStamper(reader,baos[i]);
            AcroFields form = stamp.getAcroFields();

            //填充表单
            form.setField("trueName", "姓名"+i);
            form.setField("year", "2020");              //开票时间
            form.setField("month", "09");
            form.setField("day", "16");
            form.setField("studyNo", "学号"+i);
            form.setField("className", "班级:"+"") ;
            for(int j=0;j<4;j++){
                form.setField("feeType"+j, "费用项"+j);
                form.setField("amount"+j, "金额"+j);
            }
            form.setField("totalAmountCh","合计人民币(大写):"+"壹万");
            form.setField("totalAmount", "4");
            form.setField("school", "xx大学");
            form.setField("jibanren", "林海帆");
            stamp.setFormFlattening(true);
            stamp.close();

        }

        //创建并打开一个pdf对象
        Document doc = new Document();
        PdfCopy pdfCopy = new PdfCopy(doc,fos);
        doc.open();

        //2页拼到一个文档里
        for (int i=0;i<2;i++){
            PdfImportedPage impage = pdfCopy.getImportedPage(new PdfReader(baos[i].toByteArray()), 1);
            pdfCopy.addPage(impage);
        }
        //关闭
        doc.close();

    }
}

3.生成文件的效果
通过模板生成pdf文件(一页或多页)-java