如何基于Base64字符串合并多个PDF文件(无需本地文件)
合并Base64格式PDF文件的实现方案
你现在需要把基于本地文件的PDF合并改成仅用Base64字符串完成,不需要依赖本地文件,可以基于你原本用的Apache PDFBox库来调整,核心思路是把Base64字符串解码成内存流,合并后再转成Base64输出,全程不涉及本地文件操作。
具体实现代码
首先确保项目已引入Apache PDFBox依赖(以Maven为例):
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.32</version> <!-- 建议使用最新稳定版 --> </dependency>
然后编写合并方法:
import org.apache.pdfbox.multipdf.PDFMergerUtility; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Base64; public class PdfMerger { public String mergeBase64Pdfs(String... base64PdfList) throws Exception { // 初始化PDF合并工具 PDFMergerUtility merger = new PDFMergerUtility(); // 遍历所有Base64格式的PDF字符串,解码后添加为合并源 for (String base64Pdf : base64PdfList) { // 将Base64字符串解码为字节数组 byte[] pdfBytes = Base64.getDecoder().decode(base64Pdf); // 把字节数组转成内存输入流,作为合并源 merger.addSource(new ByteArrayInputStream(pdfBytes)); } // 使用内存输出流接收合并后的PDF内容,无需写入本地文件 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); merger.setDestinationStream(outputStream); // 执行合并操作 merger.mergeDocuments(null); // 将合并后的PDF字节数组重新编码为Base64字符串返回 return Base64.getEncoder().encodeToString(outputStream.toByteArray()); } // 示例调用 public static void main(String[] args) { try { PdfMerger merger = new PdfMerger(); // 替换为实际的Base64 PDF字符串 String pdf1Base64 = "你的第一个PDF的Base64内容"; String pdf2Base64 = "你的第二个PDF的Base64内容"; // 合并并获取结果 String mergedPdfBase64 = merger.mergeBase64Pdfs(pdf1Base64, pdf2Base64); System.out.println("合并完成,结果为Base64字符串:"); System.out.println(mergedPdfBase64); } catch (Exception e) { e.printStackTrace(); } } }
关键说明
- 全程使用内存流(
ByteArrayInputStream/ByteArrayOutputStream)处理,完全不依赖本地文件。 - 通过
Base64工具类完成字符串和字节数组的互转,确保PDF内容在Base64格式间正确转换。 - 原代码中无效的
OutputStream string = null;和System.out.print(string);已移除,改用内存流处理输出。 - 实际使用时需注意捕获异常,比如Base64解码失败、PDF格式错误等情况。
内容的提问来源于stack exchange,提问作者Guilherme Floriano
相关产品推荐
相关产品推荐

