如何使用Mule 4将传入的JSON负载写入pdf文件

如何使用Mule 4将传入的JSON负载写入pdf文件,mule,mule-studio,mulesoft,mule-esb,mule4,Mule,Mule Studio,Mulesoft,Mule Esb,Mule4,我正在尝试将JSON转换为pdf文件,但在尝试打开文件时,在mule 4(运行时4.2.1)中出现“加载pdf文档失败”错误。 如何解决此问题 代码: 我怀疑问题在于流正在将JSON文件写入名为test.pdf的文件。如果您尝试使用PDF阅读器打开,它将失败,因为JSON文档不是PDF文件 <set-payload value="#[payload]" doc:name="Set Payload" doc:id="a250f9a4-c633

我正在尝试将JSON转换为pdf文件,但在尝试打开文件时,在mule 4(运行时4.2.1)中出现“加载pdf文档失败”错误。 如何解决此问题

代码:


我怀疑问题在于流正在将JSON文件写入名为test.pdf的文件。如果您尝试使用PDF阅读器打开,它将失败,因为JSON文档不是PDF文件

<set-payload value="#[payload]" doc:name="Set Payload" doc:id="a250f9a4-c633-4ce1-a75d-8668d2dede10" mimeType="application/json"/>


Mule没有转换为PDF的功能,因此您需要使用Java代码调用某些PDF生成库来实现转换。

在dataweave st away中不可能,因此请编写Java代码。 下面是帮助您的Java代码

将该java类放在src/main/java/com/pdf/JsonToPDF.java文件夹中

package com.pdf;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.pdf.PdfWriter;


public class JsonToPDF {

public static void jsontopdf(String filename,String content) {

Document document = new Document();

try

{

File file = new File(filename);

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));

document.open();

document.add(new Paragraph(content));

document.close();

writer.close();

} catch (DocumentException e)

{

e.printStackTrace();

} catch (FileNotFoundException e)

{

e.printStackTrace();

}


}


}
并在Dataweave中调用此静态方法。下面是dataweave代码


%dw 2.0

import java!com::pdf::JsonToPDF

output application/java

---

{

pdf :JsonToPDF::jsontopdf("C:\\Users\\nanmanikanta\\Desktop\\Integration\\test.pdf","{

'test': 'test'


}")

}

您可以将该java更改为只编写pdf,或者使该类返回pdf文件流并将其提供给其他处理器

你可以做很多事情

以下是itext库示例代码链接供您参考:


该错误似乎不完整,或者可能不是Mule的错误?请将日志中的完整错误消息添加到问题中。

%dw 2.0

import java!com::pdf::JsonToPDF

output application/java

---

{

pdf :JsonToPDF::jsontopdf("C:\\Users\\nanmanikanta\\Desktop\\Integration\\test.pdf","{

'test': 'test'


}")

}