#mule #mule-studio #mulesoft #mule-esb #mule4
#mule #mule-studio #mulesoft #mule-esb #mule4
Вопрос:
Я пытаюсь преобразовать JSON в PDF-файл, но когда я пытаюсь открыть файл, получаю ошибку «Не удалось загрузить PDF-документ» в mule 4 (время выполнения 4.2.1). Как я могу исправить эту проблему?
код:
<?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="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: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:Devendraworkspace_devmule4pdfsrcmainresourcespdf" />
</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"/>
<set-payload value="#[payload]" doc:name="Set Payload" doc:id="a250f9a4-c633-4ce1-a75d-8668d2dede10" mimeType="application/json"/>
<file:write doc:name="Write" doc:id="ca2c47a2-924d-445a-8ca1-7de6197cd583" path="test.pdf" config-ref="File_Config"/>
<logger level="INFO" doc:name="Logger" doc:id="0c629051-500e-4bc0-82b4-74b6c79ec567" message="#[payload]"/>
</flow>
</mule>
Комментарии:
1. Эта ошибка не кажется полной, или, может быть, это не ошибка от Mule? Пожалуйста, добавьте полное сообщение об ошибке из журнала в вопрос.
Ответ №1:
Я подозреваю, что проблема заключается в том, что поток записывает файл 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.
Ответ №2:
Это невозможно в 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
%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 :
https://howtodoinjava.com/library/read-generate-pdf-java-itext/