PDF添加文字或者圖片

?引入依賴

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.4</version>
</dependency>
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.4</version>
</dependency>

參數說明

inputPdfFilePath輸入文件路徑

outPutPdfFilePath輸出文件路徑

imagePros圖片集合

pdfList文字集合

public static void writeToPdf(String inputPdfFilePath, String outPutPdfFilePath, List<ImagePro> imagePros, List<PdfPro> pdfList)throws Exception {//append 追加BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outPutPdfFilePath, false));PdfReader reader = new PdfReader(inputPdfFilePath);PdfStamper stamper = new PdfStamper(reader, bos);for (PdfPro pdfPro : pdfList) {Integer pageNum = pdfPro.getPageNum();int start;int end;if (pageNum == null) {start = 1;end = reader.getNumberOfPages();} else {start = pageNum;end = pageNum;}PdfContentByte content;//BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);// "c:\\windows\\fonts\\SIMHEI.TTF" 使用windows系統的黑體BaseFont base = BaseFont.createFont(SsmConstant.FONT_URL, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);PdfGState gs = new PdfGState();for (int i = start; i <= end; i++) {//content = stamper.getOverContent(i);// 在內容上方加水印content = stamper.getUnderContent(i);//在內容下方加水印gs.setFillOpacity(0.2f);content.beginText();//字體大小content.setFontAndSize(base, 10.5F);//content.setTextMatrix(390, 810);//內容居中,橫縱坐標,偏移量content.showTextAligned(Element.ALIGN_CENTER, pdfPro.getText(), pdfPro.getX(), pdfPro.getY(), 0);content.setFontAndSize(base, 8);content.endText();}}for (ImagePro imagePro : imagePros) {Image image = Image.getInstance(imagePro.getImgPath());/* img.setAlignment(Image.LEFT | Image.TEXTWRAP); img.setBorder(Image.BOX); img.setBorderWidth(10); img.setBorderColor(BaseColor.WHITE); img.scaleToFit(100072);//大小 img.setRotationDegrees(-30);//旋轉 *///圖片的位置(坐標)image.setAbsolutePosition(imagePro.getX(), imagePro.getY());// image of the absoluteimage.scaleToFit(200, 200);image.scalePercent(imagePro.getScalePercent());//依照比例縮放. 調整縮放,控制圖片大小PdfContentByte content = stamper.getUnderContent(6);content.addImage(image);}stamper.close();//關閉打開的原來PDF文件,不執行reader.close()刪除不了(必須先執行stamper.close(),否則會報錯)reader.close();//刪除原來的PDF文件/*File targetTemplePDF = new File(inputPDFFilePath); targetTemplePDF.delete();*/
}

?pdfPro

@Data
public class PdfPro {private String text;private float x;private float y;private Integer pageNum;public PdfPro(float x, float y, String text) {this.text = text;this.x = x;this.y = y;}public PdfPro(float x, float y, String text,Integer pageNum) {this.text = text;this.x = x;this.y = y;this.pageNum = pageNum;}}

?ImagePro

@Data
public class ImagePro { private float x; //x 坐標private float y; //y 坐標private float scalePercent;  //縮放百分比private String imgPath; //路徑private Integer pageNum;public ImagePro() { }public ImagePro(float x, float y, float scalePercent, String imgPath,Integer pageNum) {this.x = x;this.y = y;this.scalePercent = scalePercent;this.imgPath = imgPath;this.pageNum = pageNum;}
}

使用示例

public static String getSignPdf(String file, String signUrl, float x, float y,float scalePercent,String agreementNo0,String agreementNo1) {String outPutFile = SsmConstant.WRITE_TO_PDF_URL + UUID.fastUUID() + ".PDF";List<ImagePro> imageList = new ArrayList<>();//蓋章ImagePro imagePro = new ImagePro(x, y, scalePercent, signUrl, 6);imageList.add(imagePro);List<PdfPro> pdfList = new ArrayList<>();// 合同編號if(agreementNo0 != null && agreementNo1 != null){pdfList.add(new PdfPro(471.99628f, 769.37f, agreementNo0));pdfList.add(new PdfPro(500.99628f, 769.37f, agreementNo1));}try {EditorPDF.writeToPdf(file, outPutFile, imageList, pdfList);} catch (Exception e) {throw new BizException("PDF生成異常");}return outPutFile;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

找JPG格式圖片的地址(持續更新中)

問題描述&#xff1a;找JPG格式圖片的地址 解決辦法&#xff1a; 第一個 谷歌的images 第二個&#xff0c;搜狗圖片和百度圖片 不過下載是WEBP格式&#xff0c;可以使用一個在線WEBP格式轉JPG格式的在線網站即可。 轉換的網址為&#xff1a; https://ezgif.com/webp-to-j…

【學歷是敲門磚】如果你想有個好的起點,不妨沖一沖計算機考研,這本書將會助你一臂之力

目錄 計算機考研難點 《計算機考研精煉1000題》揭秘問答 1. 為什么是1000題&#xff1f; 2. 有什么優勢&#xff1f; 3. 編寫團隊水平如何&#xff1f; 4. 題目及解析品質如何&#xff1f;可以試讀嗎&#xff1f; 購買鏈接 高質量的學習提升圈子 京東熱賣下單鏈接&…

可視化NGINX管理平臺Nginx Proxy Manager

# for CentOSyum install docker-compose -y# for Ubuntuapt-get install docker-compose -y 如果提示&#xff1a; 沒有可用軟件包 docker-compose&#xff0c; 錯誤&#xff1a;無須任何處理 通過 pip 安裝 docker-compose # 添加企業版附加包 yum -y install epel-rel…

java--static的注意事項

1.使用類方法、實例方法時的幾點注意事項 ①類方法中可以直接訪問類的成員&#xff0c;不可以直接訪問實例成員。 ②實例方法中既可以直接訪問類成員&#xff0c;也可以直接訪問實例成員。 ③實例方法中可以出現this關鍵字&#xff0c;類方法中不可以出現this關鍵字的。

利用工業網關進行設備數采的方法-天拓四方分享

在工業物聯網&#xff08;IIoT&#xff09;中&#xff0c;設備數采是一種關鍵技術&#xff0c;它通過收集、分析和傳輸設備運行過程中的各種數據&#xff0c;為工業制造提供重要的信息和洞察。隨著工業4.0和智能制造的快速發展&#xff0c;工業數據采集和處理已經成為工業物聯網…

甲方使用外包真的能節約成本嗎?

語&#xff1a;外包作為一種常見的業務模式&#xff0c;被廣泛應用于各行各業。然而&#xff0c;甲方在選擇外包時&#xff0c;是否真的能夠實現成本節約呢&#xff1f;本文將從多個角度進行探討。 正文&#xff1a; 降低人力成本&#xff1a;外包通常是將某些業務環節或項目交…

2022年全國英烈紀念設施數據,各區縣均有!

中國是一個擁有悠久歷史和燦爛文化的國家&#xff0c;其英烈紀念設施承載著中國人民對為國家獨立、民族解放和民主進步而英勇斗爭的先烈們的崇敬和緬懷之情。 這些設施不僅是中國革命歷史和先烈精神的重要載體&#xff0c;也是傳承紅色文化、弘揚革命精神的重要場所。 今天分享…

【RtpRtcp】3: webrtc m79:video 相關創建及切片、發送

m79 的 客戶端代碼流程。 對于視頻幀: CreateRtpStreamSenders 管理一組RtpStreamSender ,每一個RtpStreamSender 都進行rtp包的發送: 具體發送是RTPSenderVideo 處理,RTPSenderVideo 對收到的h264 幀,進行幀分片rtp,然后一組包一起使用LogAndSendToNetwork 發送的。 Rtp…

js預解釋(預編譯)

js預解釋(預編譯):在Javascript真正被解析之前, js解析引擎會首先把整個文件進行預處理, 以消除一些歧義. 這個預處理的過程就被稱為預解釋 在瀏覽器環境中, js引擎會整合<script>標簽中的內容, 產生window對象, 這個window對象就是全局對象在node環境中, 會產生global對…

Linux中df命令使用

在Linux中&#xff0c;df命令用于顯示磁盤空間的使用情況。它的基本語法如下&#xff1a; df [選項] [文件或目錄]這個命令可以用來查看當前系統上各個磁盤分區的使用情況。如果沒有指定文件或目錄&#xff0c;則所有當前被掛載的文件系統的可用空間將被顯示。 df命令的一些常…

windows11下安裝Tensor RT,并在conda虛擬環境下使用

建議仔細讀一讀NVIDIA官方出的安裝教程&#xff0c;里面有windows、linux等安裝教程&#xff0c;非常詳細&#xff0c;這里再做一下簡要總結。 TensorRT主要有三種安裝模式、五種安裝方式 毫無疑問&#xff0c;在windows系統中&#xff0c;我們只能選擇zip安裝。 安裝tensorR…

安全牛《數據分類分級自動化建設指南》發布|美創入選代表廠商,分享智能化探索

近日&#xff0c;安全牛發布《數據分類分級自動化建設指南》研究報告&#xff0c;對數據分類分級的主要技術、實施要點、選型指導、發展趨勢等展開深入探討&#xff0c;為各行業數據分類分級自動化工作落地提供幫助與指引。 美創科技被列為代表推薦廠商&#xff0c;落地案例—農…

STM32-SPI協議詳解及CubeMX+HAL函數配置分析

1 SPI協議 SPI(Serial Peripheral interface)串行外圍設備接口是同步全雙工的通信總線,在芯片的管腳上只占用四根線。 1.1 物理層 SS/NSS/CS:從設備選擇信號線(片選信號線)。由主設備控制,選擇指定的從設備。 當主機要選擇從設備時,把該從設備的SS信號線設置為低電平…

輕松記錄收支明細,一鍵打印,財務無憂!

作為現代人&#xff0c;管理好個人財務是非常重要的。但是&#xff0c;如何記錄收支明細并打印出來呢&#xff1f;今天&#xff0c;我們向您推薦一款財務軟件&#xff0c;幫助您輕松解決這個問題。 首先第一步&#xff0c;我們要打開【晨曦記賬本】&#xff0c;并登錄賬號。 第…

2023.11.22 IDEA Spring Boot 項目熱部署

目錄 引言 操作步驟 1. 在 pom.xml 中添加熱部署框架支持 2. Setting 開啟項目自動編譯 3. 以后創建的新項目進行同步配置 4. 重復 配置 步驟2 的內容 5. 開啟運行中的熱部署 引言 Spring Boot 的熱部署是一種在項目正在運行的時候修改代碼&#xff0c;卻不需要重新啟動…

yolov7訓練數據集詳細流程bike-car-person

一、準備深度學習環境 下載yolov7代碼 下載完成解壓放在自己的主目錄 命名yolov7-4 二、 準備自己的數據集 1.進入主目錄 2.進入data目錄下把你的xml文件夾命名為Annotations&#xff0c;把你的存放圖片文件夾命名為images 3.分別新建ImageSets、imagtest&#xff08;里面…

幾款Java源碼掃描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

說明 有幾個常用的Java源碼掃描工具可以幫助您進行源代碼分析和檢查。以下是其中一些工具&#xff1a; FindBugs&#xff1a;FindBugs是一個靜態分析工具&#xff0c;用于查找Java代碼中的潛在缺陷和錯誤。它可以檢測出空指針引用、資源未關閉、不良的代碼實踐等問題。FindBu…

unordered_map 與 unordered_set 的使用

unordered_map unordered_map 的介紹文檔 unordered_map 的介紹文檔&#xff1a;來自cpluscplus.com 的中文翻譯 unordered_map是存儲<key, value>鍵值對的關聯式容器&#xff0c;其允許通過keys快速的索引到與 其對應的value。在unordered_map中&#xff0c;鍵值通常用…

JAVA爬蟲2 - Jsoup解析、對接MySQL、多線程爬蟲、json庫使用

官網:https://jsoup.org/download Jsoup是一款基于Java的HTML解析器,它可以方便地從網頁中抓取和解析數據。它的主要作用是幫助開 發者處理HTML文檔,提取所需的數據或信息。下面介紹幾個常用的API: 選擇器(Selector)API:用于根據CSS選擇器語法選擇HTML元素。 屬性(Attribute…

【MySQL】寶塔面板結合內網穿透實現公網遠程訪問

文章目錄 前言1.Mysql服務安裝2.創建數據庫3.安裝cpolar3.2 創建HTTP隧道4.遠程連接5.固定TCP地址5.1 保留一個固定的公網TCP端口地址5.2 配置固定公網TCP端口地址 前言 寶塔面板的簡易操作性,使得運維難度降低,簡化了Linux命令行進行繁瑣的配置,下面簡單幾步,通過寶塔面板cpo…