JAVA使用itext根據模板生成PDF文檔


 

 

1、制作PDF模板

網址打開:https://www.pdfescape.com/open/ 

 

 

 

我們這里先在線上把基礎的內容用word文檔做好,然后轉成PDF模板,直接上傳到網站上,這樣方便點

假設我們pdf是這樣

 

 

 然后我們選擇文件上傳到網站上之后,如下圖所示

 

 

 選擇文件后,點擊upload ,或者可以把文件直接用鼠標拖到Drop PDF Here的位置,也會直接上傳,上傳成功之后會跳轉頁面,所下圖所示

 

 

 接着我們可以進行操作,點擊左上角 Form Field,這個是插入字段(你可以理解成是java中文檔要用的占位符)

 

 

 選擇對應的text,如有需要,可以選擇其他的模式,好了之后,點擊Select

 

 

 選擇之后用按住鼠標左鍵,划定要顯示的區域(綠色區域)

 

 

 然后把鼠標放到綠色區域,點擊鼠標右鍵,點擊Object Properties設置屬性名稱

 

 

 

userName 就是我們到時候在代碼中要替換的屬性名,好了之后點擊OK,然后依次設置其他的內容

還可以選中某個表單域,可以對字體、大小等進行設置(線上版本不支持編輯字體樣式、具體可以查看 https://www.pdfescape.com/windows/  需要下載軟件)

 

 

 然后點擊鼠標左側的保存按鈕,或者直接按ctrl+s 也可以直接保存,保存之后點擊下方的下載按鈕,把我們設置的pdf文檔下載下來

 

 

 

 

以上模板就制作好了。 網站還有很多其他的功能,需要的可以自己去研究使用。

 

 

接着是代碼書寫

1、引入jar包   iText-2.1.7.jar、itextasian-2.1.7.jar、itext-rtf-2.1.7.jar

   下載地址:https://yvioo.lanzous.com/b00nq830b
                      密碼:g912

 

 

 

2、這里只是一個簡單的demo方法,可以根據自己需要改寫

package com.pdf;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class Test {
    public static void main(String[] args) throws Exception {
        export();
        System.out.println("生成完成");
    }

    public static void export(){
        try {
            // pdf模板所在路徑,就是網站制作好后下載的pdf模板路徑
            String fileName = "D:/testpdf.pdf";
            PdfReader reader = new PdfReader(fileName);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            PdfStamper ps = new PdfStamper(reader, bos);

            // 使用中文字體
            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();

            //生成pdf路徑存放的路徑
            OutputStream fos = new FileOutputStream("D:/result.pdf");
            fos.write(bos.toByteArray());
            fos.flush();
            fos.close();
            bos.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 填充模板中的數據
     */
    public static void fillData(AcroFields fields, Map<String, String> data) {
        try {
            for (String key : data.keySet()) {
                String value = data.get(key);
                // 為字段賦值,注意字段名稱是區分大小寫的
                fields.setField(key, value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 填充數據源
     * 其中data存放的key值與pdf模板中的文本域值相對應
     */
    public static Map<String, String> data() {
        Map<String, String> data = new HashMap<String, String>();
        data.put("schoolName", "國際測試測試測試測試");
        data.put("userName", "yvioo");
        data.put("date", "2020/7");
        return data;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM