Java如何使用itext向PDF插入數(shù)據(jù)和圖片
一、下載Adobe Acrobat DC
二、制作模板
1、準(zhǔn)備一個(gè)word模板,并轉(zhuǎn)換成PDF格式
2、使用Adobe Acrobat DC打開(kāi)PDF文檔,并在右側(cè)搜索框搜索表單,點(diǎn)擊準(zhǔn)備表單
3、點(diǎn)擊開(kāi)始,制作PDF表單
4、掃描完成后如下圖,藍(lán)白色框就是可編輯表單
5、點(diǎn)擊表單編輯表單名稱以及插入時(shí)的字體大小樣式等,如果沒(méi)有設(shè)置字體大小,數(shù)據(jù)寫入時(shí)會(huì)將字體會(huì)根據(jù)表單的高度自適應(yīng)大小
6、編輯完成后保存PDF模板
三、在Java中使用
import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import java.io.*; import java.nio.file.Files; import java.util.Calendar; import java.util.HashMap; import java.util.Map; public class PDFUtil { private static void insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) throws IOException, DocumentException { 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); } public static Boolean pdfTemplateInsert(String templateUrl, String outputFileUrl, Map<String, Object> templateValueMap, Map<String, String> templateImageMap) { boolean success = true; OutputStream os = null; PdfStamper ps = null; PdfReader reader = null; try { os = Files.newOutputStream(new File(outputFileUrl).toPath()); //讀取pdf表單 reader = new PdfReader(templateUrl); //根據(jù)表單生成一個(gè)新的pdf文件 ps = new PdfStamper(reader, os); //獲取pdf表單 AcroFields form = ps.getAcroFields(); //給表單中添加中文字體 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); form.addSubstitutionFont(bf); if (null != templateValueMap && !templateValueMap.isEmpty()) { for (String key : templateValueMap.keySet()) { form.setField(key, String.valueOf(templateValueMap.get(key))); } } if (null != templateImageMap && !templateImageMap.isEmpty()) { for (String key : templateImageMap.keySet()) { insertImage(form, ps, key, templateImageMap.get(key)); } } ps.setFormFlattening(true); } catch (Exception e) { success = false; } finally { try { ps.close(); reader.close(); os.close(); } catch (Exception e) { e.printStackTrace(); } } return success; } public static void main(String[] args) { //模板路徑 String inputUrl = "E:/Desktop/test/demo/itext-demo.pdf"; //生成的文件路徑 String outputUrl = "E:/Desktop/test/demo/itext-demo-output.pdf"; Map<String, Object> data = new HashMap<>(); data.put("name", "張山"); data.put("year", "2000年10月"); data.put("phone", "13032451234"); data.put("gangwei", "Java開(kāi)發(fā)"); data.put("introduceOneself", "熟練使用Java常用框架:Spring 、mybatis等"); //圖片地址 String imageUrl = "E:/Desktop/test/demo/1.jpeg"; Map<String, String> templateImageMap = new HashMap<>(); templateImageMap.put("image", imageUrl); PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap); } }
執(zhí)行結(jié)果
總結(jié)
到此這篇關(guān)于Java如何使用itext向PDF插入數(shù)據(jù)和圖片的文章就介紹到這了,更多相關(guān)Java向PDF插入數(shù)據(jù)圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot自定義favicon實(shí)現(xiàn)方法實(shí)例解析
這篇文章主要介紹了Spring Boot自定義favicon實(shí)現(xiàn)方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問(wèn)題
本文主要介紹了解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03基于Javamail實(shí)現(xiàn)發(fā)送郵件(QQ/網(wǎng)易郵件服務(wù)器)
這篇文章主要介紹了基于Javamail實(shí)現(xiàn)發(fā)送郵件,分別使用QQ郵箱作為smtp郵件服務(wù)器發(fā)送郵件,使用網(wǎng)易郵箱作為smtp郵件服務(wù)器發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08spring boot項(xiàng)目fat jar瘦身的實(shí)現(xiàn)
這篇文章主要介紹了spring boot項(xiàng)目fat jar瘦身的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06