日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)

發布時間:2023/12/9 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天客戶給了一個docx文檔模板,讓頁面填寫以后下載成pdf格式的文件,之前的項目里面用過wkhtmltopdf 動態生成pdf,但是如果使用這個方式需要先把word文件轉化成html,把數據填充到html以后,再轉成pdf,這樣轉起來太復雜了。
今天無意中發現使用lowagie 可以直接編輯pdf,而且也不需要像itextpdf那樣額外引入系統字體。

話不多說,開始操作:

第一步 設置pdf模板

wps 將word 轉成pdf,使用Adobe Acrobat DC編輯pdf。
Adobe Acrobat DC下載:

地址:https://pan.baidu.com/s/1NoPc0sNfk3hojJphUoPhyQ?pwd=cir7 密碼:cir7

下載解壓后執行這個文件:

為PDF準備表單


表單準備完畢以后,如下圖:

雙擊一個區域,自定義key:

設置兩個字段試試:

保存一下,生成一個新的帶表單的pdf。

使用maven的項目

導入依賴

<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency><dependency><groupId>cn.lesper</groupId><artifactId>iTextAsian</artifactId><version>3.0</version></dependency><dependency><groupId>com.lowagie</groupId><artifactId>itext-rtf</artifactId><version>2.1.7</version></dependency>

java代碼創建PdfUtils類

package pdf.kit.util;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; /*** @ClassName PdfUtils * @Description TODO* @Author lgn* @Date 16:43 2022/8/22* @Version 1.0**/ public class PdfUtils {public static void main(String[] args) throws Exception {export();System.out.println("生成完成");}public static void export(){try {// pdf模板所在路徑,就是網站制作好后下載的pdf模板路徑String fileName = "C:\\Users\\lgn\\Desktop\\JS-PAS-2208-001222.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("C:\\Users\\lgn\\Desktop\\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("executor", "鋼鐵俠");data.put("reviewed", "小辣椒");return data;} }

驗證一下:

總結

以上是生活随笔為你收集整理的Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。