本例親自測度驗證,來自於網上,通過甄別 改造 又還之於網絡。 本例重點展現 生成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(); } }