【java】 iText使用PDF模板生成輸出PDF 這個比較清晰
阿新 • • 發佈:2019-02-07
本文所要用到的工具或jar主要有:
Adobe Acrobat 這個主要用來製作PDF模板、eclipse、 itext.jar、 解決中文的輸出問題,需要多下載一個名為iTextAsian.jar的JAR包。這個包裡面定義了與中文輸出相關的一些檔案。
pdf模板效果如下:
JAVA程式碼:
- package com.yfli.iText;
- import java.io.ByteArrayOutputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
import java.io.OutputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Map;
- import com.lowagie.text.DocumentException;
- import com.lowagie.text.pdf.AcroFields;
- import com.lowagie.text.pdf.BaseFont;
- import com.lowagie.text.pdf.PdfContentByte;
- import com.lowagie.text.pdf.PdfReader;
-
import
- publicclass Test {
- publicstaticvoid main(String[] args) throws Exception {
- test();
- System.out.println("success");
- }
- publicstaticvoid test() throws IOException, DocumentException {
-
String fileName = "F:/zxing/zs/zsTemp.pdf"
- PdfReader reader = new PdfReader(fileName);
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- /* 將要生成的目標PDF檔名稱 */
- PdfStamper ps = new PdfStamper(reader, bos);
- PdfContentByte under = ps.getUnderContent(1);
- /* 使用中文字型 */
- BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
- ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
- fontList.add(bf);
- /* 取出報表模板中的所有欄位 */
- AcroFields fields = ps.getAcroFields();
- fields.setSubstitutionFonts(fontList);
- fillData(fields, data());
- /* 必須要呼叫這個,否則文件不會生成的 */
- ps.setFormFlattening(true);
- ps.close();
- OutputStream fos = new FileOutputStream("F:/zxing/zs/zsResult.pdf");
- fos.write(bos.toByteArray());
- fos.flush();
- fos.close();
- bos.close();
- }
- publicstaticvoid fillData(AcroFields fields, Map<String, String> data)
- throws IOException, DocumentException {
- for (String key : data.keySet()) {
- String value = data.get(key);
- fields.setField(key, value); // 為欄位賦值,注意欄位名稱是區分大小寫的
- }
- }
- publicstatic Map<String, String> data() {
- Map<String, String> data = new HashMap<String, String>();
- data.put("name", "test:");
- data.put("bianhao", "xx第10000001號");
- data.put("amount", "1000");
- data.put("date","2015年7月7日");
- return data;
- }
- }