java實(shí)現(xiàn)根據(jù)pdf模板生成文件并插入文字,選項(xiàng),簽名和公章
成果
使用word,制作一個(gè)模板
使用pdf編輯器,生成pdf模板
我這里使用福昕pdf編輯器,其他pdf編輯器(如Adobe Acrobat)也可以用但是大多要錢。
1.從做好的word導(dǎo)入來(lái)創(chuàng)建pdf
2.插入文字域
右鍵文字域,填入字段與屬性
3.插入選項(xiàng)域
導(dǎo)出值不要忘記填寫,與代碼對(duì)應(yīng)上。
導(dǎo)出值不要忘記填寫,與代碼對(duì)應(yīng)上。
4.插入圖片域,預(yù)插入簽名和公章
注意:外觀這里的邊框和填充都選無(wú)色,否則圖片會(huì)被填充色蓋??;
注意:選項(xiàng)這里我們選擇只顯示標(biāo)簽。
5.模板做好了,我們進(jìn)行保存
java 實(shí)現(xiàn)
引入依賴
<!-- pdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.2</version> </dependency> <!--中文字體--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <!--html xml 轉(zhuǎn)為pdf--> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.11</version> </dependency>
代碼實(shí)現(xiàn)
package com.tencent.qcloud.roomservice.webrtc.utils; import com.alibaba.fastjson.JSONObject; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Map; /** * @author dume * @ClassName PdfTest * @description: pdf模板操作 * @date 2024年07月26日 * @version: 1.0 */ public class PdfTest { public static void main(String[] args) { //測(cè)試執(zhí)行 FillTemplate( "C:\\test\\申請(qǐng)表.pdf", "C:\\test\\新申請(qǐng)表.pdf", "杜小七", "遼寧大連", "跑步", "Yes", "Yes", "Yes", "C:\\test\\電子簽名.png", "C:\\test\\公章.png" ); } /** * 根據(jù)模板生成pdf * @param sourcesPath 原文件路徑 * @param targetPath 生成文件路徑 * @param name 參數(shù) * @param address 參數(shù) * @param hobby 參數(shù) * @param select_1 選項(xiàng) * @param select_2 選項(xiàng) * @param select_3 選項(xiàng) * @param signPath 簽名圖片路徑 * @param gongzhangPath 公章圖片路徑 */ public static void FillTemplate( String sourcesPath, String targetPath, String name, String address, String hobby, String select_1, String select_2, String select_3, String signPath, String gongzhangPath ){ //設(shè)置參數(shù) JSONObject jsonObject = new JSONObject(); jsonObject.put("name",name); jsonObject.put("address",address); jsonObject.put("hobby",hobby); jsonObject.put("select_1",select_1); jsonObject.put("select_2",select_2); jsonObject.put("select_3",select_3); // 填充創(chuàng)建pdf PdfReader reader = null; PdfStamper stamp = null; ByteArrayOutputStream baos =null; try { reader = new PdfReader( sourcesPath); File deskFile = new File(targetPath); stamp = new PdfStamper(reader, new FileOutputStream(deskFile)); // 取出報(bào)表模板中的所有字段 AcroFields form = stamp.getAcroFields(); System.out.println(form.getFields().keySet()); //設(shè)置宋體 BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); if (jsonObject != null) { for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String key = entry.getKey(); String value = entry.getValue().toString(); //保存選項(xiàng) if (key.startsWith("select")) { form.setField(key, value, true); //保存文字 }else { form.setFieldProperty(key, "textfont", song, null); form.setField(key, value); } } } //插入簽名 insertImage(form,stamp,"sign",signPath); //插入公章 insertImage(form,stamp,"gongzhang",gongzhangPath); //保存修改 stamp.setFormFlattening(true); }catch (Exception e){ e.printStackTrace(); }finally { if (stamp != null) { try{ stamp.close(); }catch (Exception e){ e.printStackTrace(); } } if (reader != null) { try{ reader.close(); }catch (Exception e){ e.printStackTrace(); } } if (baos != null) { try{ baos.close(); }catch (Exception e){ e.printStackTrace(); } } } } /** * pdf模板插入圖片 * @param form * @param stamper * @param filedName * @param url * @return */ public static boolean insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) { try { int pageNo = form.getFieldPositions(filedName).get(0).page; Rectangle signRect = form.getFieldPositions(filedName).get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); Image image = Image.getInstance(url); // 獲取操作的頁(yè)面 PdfContentByte under = stamper.getOverContent(pageNo); // 根據(jù)域的大小縮放圖片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 添加圖片 image.setAbsolutePosition(x, y); under.addImage(image); }catch (Exception e){ return false; } return true; } }
執(zhí)行測(cè)試
以上就是java實(shí)現(xiàn)根據(jù)pdf模板生成文件并插入文字,選項(xiàng),簽名和公章的詳細(xì)內(nèi)容,更多關(guān)于java pdf模板生成文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
200行Java代碼如何實(shí)現(xiàn)依賴注入框架詳解
依賴注入對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用200行Java代碼如何實(shí)現(xiàn)依賴注入框架的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05springboot CompletableFuture并行計(jì)算及使用方法
CompletableFuture基于 Future 和 CompletionStage 接口,利用線程池、回調(diào)函數(shù)、異常處理、組合操作等機(jī)制,提供了強(qiáng)大而靈活的異步編程功能,這篇文章主要介紹了springboot CompletableFuture并行計(jì)算及使用方法,需要的朋友可以參考下2024-05-05SpringBoot實(shí)現(xiàn)阿里云短信接口對(duì)接的示例代碼
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)阿里云短信接口對(duì)接的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證
本文主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04詳解javaweb中jstl如何循環(huán)List中的Map數(shù)據(jù)
這篇文章主要介紹了詳解javaweb中jstl如何循環(huán)List中的Map數(shù)據(jù)的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10SpringQuartz集群支持JDBC存儲(chǔ)與分布式執(zhí)行的最佳實(shí)踐
SpringQuartz集群通過(guò)JDBC存儲(chǔ)和分布式執(zhí)行機(jī)制,有效解決了單點(diǎn)故障和擴(kuò)展性問(wèn)題,本文將詳細(xì)介紹SpringQuartz集群支持的實(shí)現(xiàn)原理、配置方法和最佳實(shí)踐,助力開發(fā)者構(gòu)建穩(wěn)定可靠的分布式調(diào)度系統(tǒng),感興趣的朋友一起看看吧2025-04-04Java運(yùn)行Python腳本的幾種方式小結(jié)
在跨語(yǔ)言編程中,有時(shí)候我們需要在 Java 應(yīng)用程序中執(zhí)行 Python 腳本,這可能是為了利用 Python 豐富的庫(kù)生態(tài)系統(tǒng),或者是為了在已有 Java 系統(tǒng)中集成一些 Python 特有的功能,本文給大家介紹了實(shí)現(xiàn)這幾種目標(biāo)的方法,需要的朋友可以參考下2024-12-12java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)
本文主要介紹了java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07