如何使用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
相关产品推荐
相关产品推荐

