在分佈式服務、Web API 或無服務器函數中,PDF 文件常常以 Base64 字符串 的形式傳輸。這種方式避免了直接的文件操作,更適合跨網絡調用。開發者若希望對接收到的 PDF 進行處理(例如加水印、加批註、簽章等),就需要掌握 Base64 與 PDF 的互轉 以及 文檔編輯 方法。
本文將介紹如何使用 Java 和 Free Spire.PDF for Java 來完成以下操作:
- 將 Base64 字符串解碼為 PDF;
- 編輯 PDF(示例:在每頁添加文本水印“Processed”);
- 將編輯後的 PDF 再次編碼為 Base64 字符串。
準備工作
請先在項目中引入PDF操作庫,可下載Free Spire.PDF for Java導入項目,或通過 Maven:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>9.13.0</version>
</dependency>
Step 1: 解碼Base64並加載PDF
首先,接收來自 API 或外部系統的 Base64 編碼字符串,解碼為字節數組,然後通過 PdfDocument.loadFromBytes() 方法加載為 PDF 文檔對象。
代碼示例:
import com.spire.pdf.*;
import java.util.Base64;
String base64Pdf = "..."; // 輸入的Base64字符串
byte[] pdfBytes = Base64.getDecoder().decode(base64Pdf);
// 加載 PDF 文檔
PdfDocument pdf = new PdfDocument();
pdf.loadFromBytes(pdfBytes);
Step 2: 編輯PDF文檔
Spire.PDF 提供了豐富的繪製 API,可以在 PDF 頁面上添加文字、圖片或圖形,以及操作頁面、創建表單、加密解密PDF等。下面的示例演示如何在每一頁添加藍色加粗文本“Modified”,作為處理標記。
操作説明:
- 遍歷文檔的每一頁;
- 創建字體與畫刷對象;
- 使用
drawString()方法繪製文字。
代碼示例:
import com.spire.pdf.graphics.*;
import java.awt.*;
for (PdfPageBase page : (Iterable<PdfPageBase>) pdf.getPages()) {
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.BOLD, 36));
PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
page.getCanvas().drawString("Processed", font, brush, 100, 100);
}
Step 3: 保存PDF並重新編碼為Base64
完成編輯後,將 PDF 保存到內存流中,再次轉為 Base64 字符串,以便傳輸或存儲。
代碼示例:
import java.io.*;
ByteArrayOutputStream output = new ByteArrayOutputStream();
pdf.saveToStream(output);
pdf.close();
// 轉回 Base64 字符串
String resultBase64 = Base64.getEncoder().encodeToString(output.toByteArray());
System.out.println(resultBase64);
完整代碼示例
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.io.*;
import java.util.Base64;
public class EditBase64Pdf {
public static void main(String[] args) throws Exception {
String base64Pdf = "..."; // 輸入的Base64字符串
// Step 1: 解碼並加載 PDF
byte[] pdfBytes = Base64.getDecoder().decode(base64Pdf);
PdfDocument pdf = new PdfDocument();
pdf.loadFromBytes(pdfBytes);
// Step 2: 在每頁添加水印文字
for (PdfPageBase page : (Iterable<PdfPageBase>) pdf.getPages()) {
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.BOLD, 36));
PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
page.getCanvas().drawString("Processed", font, brush, 100, 100);
}
// Step 3: 保存並轉回Base64
ByteArrayOutputStream output = new ByteArrayOutputStream();
pdf.saveToStream(output);
pdf.close();
String resultBase64 = Base64.getEncoder().encodeToString(output.toByteArray());
System.out.println(resultBase64);
}
}
編輯後的PDF文檔:
總結
通過本文的示例,我們學習瞭如何在 Java 中結合 Spire.PDF 來處理 Base64 格式的 PDF 文件,主要包括:
- Base64 與 PDF 的互轉:便於網絡傳輸與無文件系統環境;
- PDF 編輯操作:可以添加文字水印、圖形、圖片等;
- 內存流處理:保證操作的高效與靈活,適合嵌入 API 服務或微服務。
這種方式尤其適合於 API 接口返回 PDF、雲函數批處理 或 分佈式系統中的文檔標記 場景。
更多教程請參考:Spire.PDF for Java 教程中心