You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java与MuleSoft实现多PDF文件合并?

用Mule 4 + Java + Apache PDFBox 实现多PDF合并的HTTP服务

1. 添加依赖

在Mule项目的pom.xml中引入Apache PDFBox的稳定版依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version>
</dependency>

2. 编写PDF合并工具类

创建Java工具类封装PDFBox的合并逻辑,直接处理输入流列表:

import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;

public class PdfMerger {
    public static byte[] mergePdfs(List<InputStream> pdfInputs) throws Exception {
        PDFMergerUtility merger = new PDFMergerUtility();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        
        for (InputStream pdfStream : pdfInputs) {
            merger.addSource(pdfStream);
        }
        
        merger.setDestinationStream(outputStream);
        merger.mergeDocuments(null);
        
        // 关闭所有输入流释放资源
        for (InputStream pdfStream : pdfInputs) {
            pdfStream.close();
        }
        
        return outputStream.toByteArray();
    }
}

3. 配置Mule 4流

构建HTTP端点接收多文件上传,调用工具类完成合并后返回结果:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
    <http:listener-config name="HTTP_Listener_Config" host="0.0.0.0" port="8081" />

    <flow name="pdf-merger-flow">
        <http:listener path="/merge-pdfs" allowedMethods="POST" config-ref="HTTP_Listener_Config"/>
        <!-- 过滤并收集所有PDF格式的上传文件输入流 -->
        <set-variable value="#[payload.parts filter ($.contentType == 'application/pdf') map $.content]" variableName="pdfStreams"/>
        <!-- 调用Java工具类执行合并 -->
        <set-payload value="#[com.yourpackage.PdfMerger.mergePdfs(vars.pdfStreams)]"/>
        <!-- 设置响应头,指定返回PDF格式 -->
        <http:response-header headerName="Content-Type" value="application/pdf"/>
        <http:response-header headerName="Content-Disposition" value="attachment; filename=merged.pdf"/>
    </flow>
</mule>

4. 测试服务

用curl命令上传多个PDF文件并获取合并结果:

curl -X POST -F "file1=@/local/path/first.pdf" -F "file2=@/local/path/second.pdf" http://localhost:8081/merge-pdfs --output merged_result.pdf

注意事项

  • 可在工具类中添加格式校验逻辑,避免非PDF文件导致合并失败
  • 处理大文件时,建议直接写入响应流而非先转成byte[],减少内存占用
  • 可在Mule流中添加try-catch作用域,捕获合并异常并返回友好错误信息

内容的提问来源于stack exchange,提问作者Integraty_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:12:15