最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)根據(jù)模板讀取PDF并替換指定內(nèi)容

 更新時間:2025年02月10日 09:22:28   作者:五行星辰  
在實際開發(fā)里,經(jīng)常會遇到需要根據(jù)?PDF?模板文檔生成特定?PDF?的需求,本文將利用Java中的iText實現(xiàn)讀取?PDF?模板文檔并替換指定內(nèi)容,最后重新生成新PDF,感興趣的可以了解下

在實際開發(fā)里,經(jīng)常會遇到需要根據(jù) PDF 模板文檔生成特定 PDF 的需求,比如合同、證書等。咱們可以借助 iText 庫來實現(xiàn)讀取 PDF 模板文檔、替換指定內(nèi)容,最后重新生成新 PDF 的功能。下面我就詳細給大家講講具體怎么做。

1. 引入依賴

如果你用 Maven 管理項目,在 pom.xml 里添加以下依賴:

<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.13.3</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>

itext-asian 這個依賴是為了支持中文等亞洲文字的顯示。

2. 創(chuàng)建 PDF 模板

首先,得有一個 PDF 模板文件 template.pdf,在模板里用特定的占位符來表示需要替換的內(nèi)容??梢允褂?Adobe Acrobat 等工具在 PDF 里添加文本域作為占位符,比如添加一個名為 name 的文本域來表示姓名。

3. Java 代碼實現(xiàn)

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.*;
 
import java.io.*;
import java.util.HashMap;
import java.util.Map;
 
public class PdfTemplateProcessor {
    public static void main(String[] args) {
        try {
            // 讀取 PDF 模板文件
            PdfReader reader = new PdfReader("template.pdf");
            // 創(chuàng)建一個輸出流,用于保存新生成的 PDF
            FileOutputStream outputStream = new FileOutputStream("output.pdf");
            // 創(chuàng)建一個 PdfStamper 對象,用于操作 PDF 內(nèi)容
            PdfStamper stamper = new PdfStamper(reader, outputStream);
 
            // 獲取 PDF 表單
            AcroFields form = stamper.getAcroFields();
            // 設(shè)置支持中文
            BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            form.addSubstitutionFont(baseFont);
 
            // 準(zhǔn)備要替換的數(shù)據(jù)
            Map<String, String> data = new HashMap<>();
            data.put("name", "張三");
            data.put("date", "2024-10-01");
 
            // 替換表單中的占位符
            for (Map.Entry<String, String> entry : data.entrySet()) {
                String fieldName = entry.getKey();
                String fieldValue = entry.getValue();
                form.setField(fieldName, fieldValue);
            }
 
            // 關(guān)閉表單編輯
            stamper.setFormFlattening(true);
            // 關(guān)閉 stamper 和 reader
            stamper.close();
            reader.close();
            outputStream.close();
 
            System.out.println("新的 PDF 文檔生成成功!");
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
            System.out.println("生成新的 PDF 文檔失敗:" + e.getMessage());
        }
    }
}

4. 代碼解釋

1.讀取 PDF 模板文件

PdfReader reader = new PdfReader("template.pdf");
FileOutputStream outputStream = new FileOutputStream("output.pdf");
PdfStamper stamper = new PdfStamper(reader, outputStream);

通過 PdfReader 讀取 template.pdf 文件,使用 FileOutputStream 創(chuàng)建一個輸出流,用于保存新生成的 PDF 文件。PdfStamper 是 iText 里用于操作 PDF 內(nèi)容的重要類,它能讓我們在不改變原文件結(jié)構(gòu)的情況下修改 PDF 內(nèi)容。

2.獲取 PDF 表單并設(shè)置中文支持

AcroFields form = stamper.getAcroFields();
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
form.addSubstitutionFont(baseFont);

AcroFields 表示 PDF 中的表單域,通過 stamper.getAcroFields() 獲取表單。為了支持中文顯示,使用 BaseFont.createFont 方法創(chuàng)建一個支持中文的字體,并添加到表單中。

3.準(zhǔn)備要替換的數(shù)據(jù)

Map<String, String> data = new HashMap<>();
data.put("name", "張三");
data.put("date", "2024-10-01");

創(chuàng)建一個 Map 對象,將占位符(表單域名稱)和要替換的內(nèi)容進行映射。

4.替換表單中的占位符

for (Map.Entry<String, String> entry : data.entrySet()) {
    String fieldName = entry.getKey();
    String fieldValue = entry.getValue();
    form.setField(fieldName, fieldValue);
}

遍歷 Map,使用 form.setField 方法將表單域中的占位符替換為實際內(nèi)容。

5.關(guān)閉表單編輯并保存新 PDF

stamper.setFormFlattening(true);
stamper.close();
reader.close();
outputStream.close();

stamper.setFormFlattening(true) 用于將表單域扁平化,防止表單域被再次編輯。最后關(guān)閉 stamper、reader 和輸出流,保存新生成的 PDF 文件。

以上就是Java實現(xiàn)根據(jù)模板讀取PDF并替換指定內(nèi)容的詳細內(nèi)容,更多關(guān)于Java讀取PDF的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解Java高級特性——注解

    深入理解Java高級特性——注解

    這篇文章主要介紹了Java高級特性——注解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JAVA強密碼校驗算法示例代碼

    JAVA強密碼校驗算法示例代碼

    最近系統(tǒng)需要做用戶密碼升級,增加強密碼校驗,密碼長度,復(fù)雜度等等,這篇文章主要介紹了JAVA強密碼校驗算法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • minio的下載和springboot整合minio使用方法

    minio的下載和springboot整合minio使用方法

    本文介紹了如何通過Docker拉取MinIO鏡像,并創(chuàng)建MinIO容器的過程,首先,需要在本地創(chuàng)建/data和/conf兩個目錄用于掛載MinIO的數(shù)據(jù)和配置文件,接下來,通過docker?run命令啟動容器,設(shè)置MinIO的訪問端口、用戶名、密碼等信息,感興趣的朋友一起看看吧
    2024-09-09
  • SpringBoot+Vue.js實現(xiàn)前后端分離的文件上傳功能

    SpringBoot+Vue.js實現(xiàn)前后端分離的文件上傳功能

    這篇文章主要介紹了SpringBoot+Vue.js實現(xiàn)前后端分離的文件上傳功能,需要的朋友可以參考下
    2018-06-06
  • Javaweb resin4如何配置端口虛擬目錄

    Javaweb resin4如何配置端口虛擬目錄

    這篇文章主要介紹了Javaweb resin4如何配置端口虛擬目錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java批量生成節(jié)假日值班表Rota的示例詳解

    Java批量生成節(jié)假日值班表Rota的示例詳解

    本文介紹了一個基于2025年1月真實節(jié)假日安排的Java值班排班算法的純內(nèi)存實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-12-12
  • druid連接池的參數(shù)配置示例全面解析

    druid連接池的參數(shù)配置示例全面解析

    這篇文章主要為大家介紹了druid連接池的參數(shù)配置示例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 教你如何將Springboot項目成功部署到linux服務(wù)器

    教你如何將Springboot項目成功部署到linux服務(wù)器

    這篇文章主要介紹了如何將Springboot項目成功部署到linux服務(wù)器上,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java?-jar參數(shù)設(shè)置小結(jié)

    Java?-jar參數(shù)設(shè)置小結(jié)

    本文主要介紹了Java?-jar參數(shù)設(shè)置小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring 源碼解析CommonAnnotationBeanPostProcessor

    Spring 源碼解析CommonAnnotationBeanPostProcessor

    這篇文章主要為大家介紹了Spring 源碼解析CommonAnnotationBeanPostProcessor示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論

云和县| 临沭县| 黑龙江省| 大同市| 肥西县| 沙田区| 和顺县| 永胜县| 临朐县| 凉城县| 黑龙江省| 延安市| 凤山县| 日照市| 西乌珠穆沁旗| 绥化市| 邯郸市| 尼玛县| 蒙阴县| 怀远县| 峨边| 洛宁县| 浑源县| 钟山县| 张北县| 洪江市| 玛曲县| 甘谷县| 襄垣县| 桐柏县| 岑溪市| 汤原县| 赣榆县| 长汀县| 广昌县| 广宁县| 汉寿县| 兴仁县| 北海市| 平南县| 和林格尔县|