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; } }