1. 程式人生 > >【java】 iText使用PDF模板生成輸出PDF 這個比較清晰

【java】 iText使用PDF模板生成輸出PDF 這個比較清晰

本文所要用到的工具或jar主要有:

Adobe Acrobat 這個主要用來製作PDF模板、eclipse、 itext.jar、 解決中文的輸出問題,需要多下載一個名為iTextAsian.jar的JAR包。這個包裡面定義了與中文輸出相關的一些檔案。 

pdf模板效果如下:


JAVA程式碼:

  1. package com.yfli.iText;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.OutputStream;  
  6. import java.util.ArrayList;  
  7. import java.util.HashMap;  
  8. import java.util.Map;  
  9. import com.lowagie.text.DocumentException;  
  10. import com.lowagie.text.pdf.AcroFields;  
  11. import com.lowagie.text.pdf.BaseFont;  
  12. import com.lowagie.text.pdf.PdfContentByte;  
  13. import com.lowagie.text.pdf.PdfReader;  
  14. import
     com.lowagie.text.pdf.PdfStamper;  
  15. publicclass Test {  
  16.     publicstaticvoid main(String[] args) throws Exception {  
  17.         test();  
  18.         System.out.println("success");  
  19.     }  
  20.     publicstaticvoid test() throws IOException, DocumentException {  
  21.         String fileName = "F:/zxing/zs/zsTemp.pdf"
    // pdf模板
  22.         PdfReader reader = new PdfReader(fileName);  
  23.         ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  24.         /* 將要生成的目標PDF檔名稱 */
  25.         PdfStamper ps = new PdfStamper(reader, bos);  
  26.         PdfContentByte under = ps.getUnderContent(1);     
  27.           /* 使用中文字型 */
  28.         BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
  29.         ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();  
  30.         fontList.add(bf);  
  31.         /* 取出報表模板中的所有欄位 */
  32.         AcroFields fields = ps.getAcroFields();  
  33.         fields.setSubstitutionFonts(fontList);  
  34.         fillData(fields, data());  
  35.         /* 必須要呼叫這個,否則文件不會生成的 */
  36.         ps.setFormFlattening(true);  
  37.         ps.close();  
  38.         OutputStream fos = new FileOutputStream("F:/zxing/zs/zsResult.pdf");  
  39.         fos.write(bos.toByteArray());  
  40.         fos.flush();  
  41.         fos.close();  
  42.         bos.close();  
  43.     }  
  44.     publicstaticvoid fillData(AcroFields fields, Map<String, String> data)  
  45.             throws IOException, DocumentException {  
  46.         for (String key : data.keySet()) {  
  47.             String value = data.get(key);  
  48.             fields.setField(key, value); // 為欄位賦值,注意欄位名稱是區分大小寫的
  49.         }  
  50.     }  
  51.     publicstatic Map<String, String> data() {  
  52.         Map<String, String> data = new HashMap<String, String>();  
  53.         data.put("name""test:");  
  54.         data.put("bianhao""xx第10000001號");  
  55.         data.put("amount""1000");  
  56.         data.put("date","2015年7月7日");  
  57.         return data;  
  58.     }  
  59. }