itext 之表單

 

  本例親自測度驗證,來自於網上,通過甄別 改造 又還之於網絡。 本例重點展現 生成PDF模板,在模板上經過pdf第三方編輯軟件打開編輯,在指定地方加入表單,而後經過java代碼打開模板對指定名稱的表單加入數據 生成用戶所需的pdf文件。 特別注意:itext包括adobe官方的PDF編輯器,很難幾乎不可能 完成這種操做: 打開生成好的PDF文件,插入一段文字或表格,讓插入點緣由的內容的位置移動變化。  或者說 ITEXT很難完成真正意義上的插入功能,他只能在緣由基礎上 增長一層 對緣由的內容進行覆蓋。java

另外本例,也解決了一箇中文網上少有資料解決的一個問題 : 對於模板中的複選框 選中樣式後,生成非表單樣式的PDF文件時,複選框是叉,而不是表單中設定的選中樣式。其核心代碼是:spring

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();




    }


}
相關文章
相關標籤/搜索