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

如何在Mule 4中将JSON写入PDF及解决加载失败错误

在Mule 4中将JSON转换为PDF并修复加载失败问题

先说说你遇到的错误原因

兄弟,你现在的配置犯了一个很直观的错误:你只是把传入的JSON payload以纯文本形式写入了一个后缀为.pdf的文件,但这根本不是真正的PDF文件!PDF是一种特定格式的二进制文件,不是随便改个扩展名就能变成PDF的,所以你的PDF阅读器才会报错“Failed to load PDF document”——它打开的其实是个JSON文本,自然识别不了。

正确的JSON转PDF实现方法

Mule 4本身没有直接把JSON转PDF的原生组件,我们通常用两种方案来实现:

方案一:用Mule PDF模块(官方生态推荐)

这个方案是最省心的,利用Mule的PDF模块先把JSON转成HTML,再把HTML转成标准PDF:

  1. 第一步:安装PDF模块
    在Anypoint Studio的Exchange中搜索PDF Module,选择和你Mule 4.2.1兼容的版本安装到项目里。

  2. 第二步:修改你的Flow配置
    把原来直接写JSON的流程改成“JSON→HTML→PDF→写入文件”的流程,示例配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:pdf="http://www.mulesoft.org/schema/mule/pdf" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 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://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd http://www.mulesoft.org/schema/mule/pdf http://www.mulesoft.org/schema/mule/pdf/current/mule-pdf.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="79ef9cde-39c4-449a-8cac-9aeb3be30c27" >
<http:listener-connection host="0.0.0.0" port="8084" />
</http:listener-config>
<file:config name="File_Config" doc:name="File Config" doc:id="d67cbdb7-3bc8-4f04-8d7f-862c539f5f3f" >
<file:connection workingDir="D:\Devendra\workspace_dev\mule4\pdf\src\main\resources\pdf" />
</file:config>
<flow name="pdfFlow" doc:id="eaef4b93-c6f1-4e01-9df3-93e2ba2dcba4" >
<http:listener doc:name="Listener" doc:id="1407afe8-dbea-4f67-8514-29b8039c5638" config-ref="HTTP_Listener_config" path="/pdf"/>
<!-- 把JSON转换成结构化的HTML -->
<ee:transform doc:name="JSON to HTML" doc:id="transform-html">
    <ee:message>
        <ee:set-payload><![CDATA[%dw 2.0
output application/html
---
"<html><body><h1>JSON转PDF结果</h1>"
++ "<table border='1'><tr><th>字段</th><th>值</th></tr>"
++ (payload pluck ((value, key) -> "<tr><td>" ++ key as String ++ "</td><td>" ++ value as String ++ "</td></tr>") joinBy "")
++ "</table></body></html>"]]></ee:set-payload>
    </ee:message>
</ee:transform>
<!-- 用PDF模块把HTML转成标准PDF二进制流 -->
<pdf:generate-pdf doc:name="Generate PDF" doc:id="gen-pdf"/>
<!-- 把真正的PDF二进制写入文件 -->
<file:write doc:name="Write PDF" doc:id="write-pdf" path="test.pdf" config-ref="File_Config"/>
<logger level="INFO" doc:name="Logger" doc:id="log-success" message="PDF文件生成成功!"/>
</flow>
</mule>

这个DataWeave脚本会把JSON的键值对转换成一个HTML表格,然后PDF模块会把这个HTML渲染成标准的PDF文件,这样写出来的文件就能被阅读器正常打开了。

方案二:用Apache PDFBox自定义生成(适合复杂需求)

如果你的PDF格式需求比较复杂,比如需要自定义字体、排版,可以直接用Apache PDFBox这个Java库来实现:

  1. 第一步:添加依赖
    在项目的pom.xml中加入PDFBox的依赖(选一个和Mule 4.2.1兼容的版本,比如2.0.24):
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>
  1. 第二步:用Java组件编写PDF生成逻辑
    创建一个Java类,接收JSON数据,用PDFBox生成PDF并返回二进制流,然后在Flow中调用这个Java组件,最后把二进制流写入文件。

最后再提醒一下

别再直接把JSON文本存成.pdf文件啦!必须先把JSON数据转换成符合PDF规范的二进制内容,才能生成能正常打开的PDF文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:37:31