Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)
生活随笔
收集整理的這篇文章主要介紹了
Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天客戶給了一個(gè)docx文檔模板,讓頁(yè)面填寫(xiě)以后下載成pdf格式的文件,之前的項(xiàng)目里面用過(guò)wkhtmltopdf 動(dòng)態(tài)生成pdf,但是如果使用這個(gè)方式需要先把word文件轉(zhuǎn)化成html,把數(shù)據(jù)填充到html以后,再轉(zhuǎn)成pdf,這樣轉(zhuǎn)起來(lái)太復(fù)雜了。
今天無(wú)意中發(fā)現(xiàn)使用lowagie 可以直接編輯pdf,而且也不需要像itextpdf那樣額外引入系統(tǒng)字體。
話不多說(shuō),開(kāi)始操作:
第一步 設(shè)置pdf模板
wps 將word 轉(zhuǎn)成pdf,使用Adobe Acrobat DC編輯pdf。
Adobe Acrobat DC下載:
下載解壓后執(zhí)行這個(gè)文件:
為PDF準(zhǔn)備表單
表單準(zhǔn)備完畢以后,如下圖:
雙擊一個(gè)區(qū)域,自定義key:
設(shè)置兩個(gè)字段試試:
保存一下,生成一個(gè)新的帶表單的pdf。
使用maven的項(xiàng)目
導(dǎo)入依賴
<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代碼創(chuàng)建PdfUtils類(lèi)
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模板所在路徑,就是網(wǎng)站制作好后下載的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());//必須要調(diào)用這個(gè),否則文檔會(huì)出現(xiàn)你不想出現(xiàn)的東西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();}}/*** 填充模板中的數(shù)據(jù)*/public static void fillData(AcroFields fields, Map<String, String> data) {try {for (String key : data.keySet()) {String value = data.get(key);// 為字段賦值,注意字段名稱(chēng)是區(qū)分大小寫(xiě)的fields.setField(key, value);}} catch (Exception e) {e.printStackTrace();}}/*** 填充數(shù)據(jù)源* 其中data存放的key值與pdf模板中的文本域值相對(duì)應(yīng)*/public static Map<String, String> data() {Map<String, String> data = new HashMap<String, String>();data.put("executor", "鋼鐵俠");data.put("reviewed", "小辣椒");return data;} }驗(yàn)證一下:
總結(jié)
以上是生活随笔為你收集整理的Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux使用笔记: 设置Samba服务
- 下一篇: VMware安装win7系统