在做專案過程中,用到一個第三方外掛,這個外掛操作的是pdf,我需要生成一個pdf載入到這個外掛中。下面我就把自己學習生成pdf的過程記錄下來。
3
將pdf轉換成pdf表單。
用Adobe Acrobat DC開啟匯出的pdf,點選「準備表單」,然後選擇剛才儲存的pdf,點選開始,就生成一個pdf form表單,我們可以看到,每一個表格的名字都是以「fill_」開頭。
4
修改表格的名字,同時設定表格的字型,方便程式設計。
5
用java遍歷表單域,給表格賦值
新建一個java專案,匯入所需的jar包,將pdf表格放入專案根目錄,建立一個Reader類作為測試類。
6
程式程式碼如下import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;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;public class Reader {public static void main(String [] args){//1 準備要填充的資料Map paraMap = new HashMap();paraMap.put("XM", "付測試");paraMap.put("XB", "男");paraMap.put("MZ", "漢");paraMap.put("CSRQ", "男");paraMap.put("GMSFHM", "111111111111111111");try {//2 讀入pdf表單PdfReader reader = new PdfReader("G:WorkspacesMyEclipse2013JAVAPDFblspb.pdf");//3 根據表單生成一個新的pdfPdfStamper ps = new PdfStamper(reader,new FileOutputStream("G:WorkspacesMyEclipse2013JAVAPDFmy_blspb.PDF"));//4 獲取pdf表單AcroFields s = ps.getAcroFields();//5給表單新增中文字型 這裡採用系統字型。不設定的話,中文可能無法顯示BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);s.addSubstitutionFont(bf);//6遍歷pdf表單表格,同時給表格賦值Map fieldMap = s.getFields();Set set = fieldMap.entrySet();Iterator iterator = set.iterator();while(iterator.hasNext()){Entry entry = (Entry) iterator.next();String key = (String)entry.getKey();if(paraMap.get(key)!=null){s.setField(key, ""+paraMap.get(key.toUpperCase()));}}ps.setFormFlattening(true); // 這句不能少ps.close();reader.close();} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();} catch (DocumentException e) {// TODO 自動生成的 catch 塊e.printStackTrace();}?}}atic void main(String [] args){//1 準備要填充的資料Map paraMap = new HashMap();paraMap.put("XM", "付測試");paraMap.put("XB", "男");paraMap.put("MZ", "漢");paraMap.put("CSRQ", "男");paraMap.put("GMSFHM", "111111111111111111");try {//2 讀入pdf表單PdfReader reader = new PdfReader("G:WorkspacesMyEclipse2013JAVAPDFblspb.pdf");//3 根據表單生成一個新的pdfPdfStamper ps = new PdfStamper(reader,new FileOutputStream("G:WorkspacesMyEclipse2013JAVAPDFmy_blspb.PDF"));//4 獲取pdf表單AcroFields s = ps.getAcroFields();//5給表單新增中文字型 這裡採用系統字型。不設定的話,中文可能無法顯示BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);s.addSubstitutionFont(bf);//6遍歷pdf表單表格,同時給表格賦值Map fieldMap = s.getFields();Set set = fieldMap.entrySet();Iterator iterator = set.iterator();while(iterator.hasNext()){Entry entry = (Entry) iterator.next();String key = (String)entry.getKey();if(paraMap.get(key)!=null){s.setField(key, ""+paraMap.get(key.toUpperCase()));}}ps.setFormFlattening(true); // 這句不能少ps.close();reader.close();} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();} catch (DocumentException e) {// TODO 自動生成的 catch 塊e.printStackTrace();}?}}