欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現根據模板讀取PDF并替換指定內容

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

在實際開發(fā)里,經常會遇到需要根據 PDF 模板文檔生成特定 PDF 的需求,比如合同、證書等。咱們可以借助 iText 庫來實現讀取 PDF 模板文檔、替換指定內容,最后重新生成新 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,在模板里用特定的占位符來表示需要替換的內容??梢允褂?Adobe Acrobat 等工具在 PDF 里添加文本域作為占位符,比如添加一個名為 name 的文本域來表示姓名。

3. Java 代碼實現

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 內容
            PdfStamper stamper = new PdfStamper(reader, outputStream);
 
            // 獲取 PDF 表單
            AcroFields form = stamper.getAcroFields();
            // 設置支持中文
            BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            form.addSubstitutionFont(baseFont);
 
            // 準備要替換的數據
            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);
            }
 
            // 關閉表單編輯
            stamper.setFormFlattening(true);
            // 關閉 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 內容的重要類,它能讓我們在不改變原文件結構的情況下修改 PDF 內容。

2.獲取 PDF 表單并設置中文支持

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.準備要替換的數據

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

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

4.替換表單中的占位符

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

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

5.關閉表單編輯并保存新 PDF

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

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

以上就是Java實現根據模板讀取PDF并替換指定內容的詳細內容,更多關于Java讀取PDF的資料請關注腳本之家其它相關文章!

相關文章

  • Springboot中如何自動轉JSON輸出

    Springboot中如何自動轉JSON輸出

    這篇文章主要介紹了Springboot中如何自動轉JSON輸出,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java開發(fā)之Spring連接數據庫方法實例分析

    Java開發(fā)之Spring連接數據庫方法實例分析

    這篇文章主要介紹了Java開發(fā)之Spring連接數據庫方法,以實例形式較為詳細的分析了Java Spring開發(fā)中針對數據庫的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Mybatis之如何攔截慢SQL日志記錄

    Mybatis之如何攔截慢SQL日志記錄

    這篇文章主要介紹了Mybatis之如何攔截慢SQL日志記錄問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Mybatis Mapper接口和xml綁定的多種方式、內部實現原理和過程解析

    Mybatis Mapper接口和xml綁定的多種方式、內部實現原理和過程解析

    在Mybatis中,我們需要創(chuàng)建一個與實體類對應的Mapper接口,然后在該接口上添加方法,這些方法對應著SQL語句,這篇文章主要介紹了Mybatis Mapper接口和xml綁定的多種方式、內部實現原理和過程,需要的朋友可以參考下
    2023-11-11
  • JAVA Integer類常用方法解析

    JAVA Integer類常用方法解析

    這篇文章主要介紹了JAVA Integer類常用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 解讀JVM的生命周期是怎么樣的

    解讀JVM的生命周期是怎么樣的

    JVM的生命周期包括啟動、運行和終止三個階段,啟動階段包括創(chuàng)建JVM實例、加載和初始化核心類庫、加載main方法所在的類和初始化類,運行階段包括執(zhí)行main方法、類加載、字節(jié)碼執(zhí)行、內存管理、線程管理和異常處理,終止階段包括正常終止、異常終止和外部終止
    2025-03-03
  • Java通過httpclient比較重定向和請求轉發(fā)

    Java通過httpclient比較重定向和請求轉發(fā)

    這篇文章主要介紹了Java通過httpclient比較重定向和請求轉發(fā),HttpClient?4.x?版本,get請求方法會自動進行重定向,而post請求方法不會自動進行重定向,需要的朋友可以參考下
    2023-04-04
  • 淺試仿?mapstruct實現微服務編排框架詳解

    淺試仿?mapstruct實現微服務編排框架詳解

    這篇文章主要為大家介紹了淺試仿?mapstruct實現微服務編排框架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 深入了解java NIO之Selector(選擇器)

    深入了解java NIO之Selector(選擇器)

    這篇文章主要介紹了java NIO之Selector(選擇器)的相關資料,文中講解非常詳細,實例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • java二維數組遍歷的2種代碼

    java二維數組遍歷的2種代碼

    這篇文章主要介紹了java二維數組遍歷的2種代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論