itext 之表单

 

  本例亲自测度验证,来自于网上,经过甄别 改造 又还之于网络。 本例重点展示 生成PDF模板,在模板上通过pdf第三方编辑软件打开编辑,在指定地方加入表单,然后通过java代码打开模板对指定名称的表单加入数据 生成用户所需的pdf文件。 特别注意:itext包括adobe官方的PDF编辑器,很难几乎不可能 完成这种操作: 打开生成好的PDF文件,插入一段文字或表格,让插入点原因的内容的位置移动变化。  或者说 ITEXT很难完成真正意义上的插入功能,他只能在原因基础上 增加一层 对原因的内容进行覆盖。

另外本例,也解决了一个中文网上少有资料解决的一个问题 : 对于模板中的复选框 选中样式后,生成非表单样式的PDF文件时,复选框是叉,而不是表单中设定的选中样式。其核心代码是:

 form.setField(item.getKey(),str,true);
注意,第三个参数的值一定是逻辑值true.

说明:
agreementTemplate.pdf中需要加入一个文本表单元素name属生为:sampleField ;同时不得加一个checkbox表单元素,name属性为check1


import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Auther: cloud
 * @Date: 2019/8/18 12:22
 * @Description:
 */
public class FillFormDemo {
    static final Logger log = LoggerFactory.getLogger(FillFormDemo.class);


    public static void   main(String[] args) throws IOException, DocumentException {
        String formTemplate = "templatepdf/agreementTemplate.pdf";

        ClassPathResource resource=new ClassPathResource(formTemplate);
        PdfReader reader = new PdfReader(resource.getInputStream());
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        PdfStamper stamper = new PdfStamper(reader, bos);
        /**
         * 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
         */
        AcroFields form = stamper.getAcroFields();

        String fontFilePath = "font/SimSun.TTF";
        ClassPathResource resource1=new ClassPathResource(fontFilePath);

        BaseFont baseFont = BaseFont.createFont(resource1.getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        form.addSubstitutionFont(baseFont);//这句必须加,不加生成的新表单不会显示

        form.setField("sampleField", "中国雄起了aaaaa");
        form.setField("check1", "是",true);
//        stamper.partialFormFlattening("sampleField");//保持表单样式
        // 设为true
        stamper.setFormFlattening(true);//为true时,保存后表单样式取消了
        stamper.flush();
        log.info( form.getField("sampleField"));
        stamper.close();
        FileOutputStream fos = new FileOutputStream("target/agreement.pdf");
        fos.write(bos.toByteArray());
        bos.close();
        fos.close();
        reader.close();




    }


}

  

 

posted @ 2019-08-26 11:31  isV1  阅读(1038)  评论(0编辑  收藏  举报