【干货来了】如何使用 MuleSoft 合并多个 PDF

简介: 【干货来了】如何使用 MuleSoft 合并多个 PDF

假设存在这样一种情况,您必须将多个 PDF 合并为一个 PDF,并将合并的 PDF 作为响应发送回源系统,或者将合并的 PDF 存储在文件位置。在本文中,您将学习如何执行此操作。MuleSoft 中没有这样的连接器,您可以使用它来合并 PDF。您必须使用 Java 库 org.apache.pdfbox.multipdf 来合并 PDF。它包含将多个 PDF 合并为一个所需的所有 Java 库。

实现

第 1 步

添加依赖项,如下面的 pom.xml 所示:

纯文本

1
<dependency>
2
    <groupId>org.apache.pdfbox</groupId>
3
    <artifactId>pdfbox</artifactId>
4
    <version>2.0.1</version>
5
</dependency>

步骤 2

在 src/main/java 下创建一个 Java 类,并创建两个静态方法和:MergeMultiplePDFmergeAndStorePDFmergePDFs

爪哇岛

1
package com.mulesoft.mergePDF;
2


3
import org.apache.pdfbox.io.MemoryUsageSetting;
4
import org.apache.pdfbox.multipdf.PDFMergerUtility;
5


6
import java.io.ByteArrayInputStream;
7
import java.io.ByteArrayOutputStream;
8
import java.io.File;
9
import java.io.IOException;
10
import java.util.Base64;
11


12
public class MergeMultiplePDF {
13


14
    /*  
15
    Merge PDF and store it in a local directory
16
    listPdfFileNames= ["src/main/resources/input/PDF1.pdf", "src/main/resources/input/PDF2.pdf"]
17
    mergedPdfFileName= "src/main/resources/output/mergedPDF.pdf"    
18
    */
19
  
20
    public static void mergeAndStorePDF(String[] listPdfFileNames, String mergedPdfFileName) throws IOException {
21


22
        /* Create and initialize object of PDFMergerUtility */
23
        PDFMergerUtility obj = new PDFMergerUtility();
24
        /* Set Destination File in the PDFMergerUtility Object */
25
        obj.setDestinationFileName(mergedPdfFileName);
26
        /* Iterate through the list of PDF filenames */
27
        for (String file : listPdfFileNames) {
28
        /* Add Each PDF files in the PDFMergerUtility Object */
29
            obj.addSource(new File(file));
30
        }
31
        /* Now the PDFMergerUtility Object has all the PDFs. Use mergeDocuments method to merge the PDFs */
32
        obj.mergeDocuments(null);
33
        /* This will store the merged PDF in the destination path passed as argument */
34
    }
35


36
    /* 
37
    Merge PDFs and return the merged PDF as a byte array 
38
    base64PDF= List of base64 encoded PDF strings
39
    Eg. ["PDF1 base64 encoded string", "PDF2 base64 encoded string"]
40
    */
41
    public static byte[] mergePDFs(String[] base64PDF) throws Exception {
42


43
        /* Create and initialize ByteArrayOutputStream to return the merged PDF as a byte array */      
44
        try (ByteArrayOutputStream destination = new ByteArrayOutputStream()) {
45
          /* Create and initialize object of PDFMergerUtility */
46
            PDFMergerUtility obj = new PDFMergerUtility();
47
          /* Set Destination Stream as the ByteArrayOutputStream object in the PDFMergerUtility Object */
48
            obj.setDestinationStream(destination);
49
          
50
            /* Iterate through the list of Base64 encoded PDF strings */  
51
            for (String pdf : base64PDF) {  
52
            /* Initialize ByteArrayInputStream object and store each PDF as bytes */
53
                ByteArrayInputStream bais = new ByteArrayInputStream(pdf.getBytes());
54
              
55
            /* Add each base64 decoded PDF in the PDFMergerUtility Object  */
56
                obj.addSource(Base64.getDecoder().wrap(bais));
57
            }   
58
          /* Now the PDFMergerUtility Object has all the PDFs. Use mergeDocuments method to merge the PDFs */
59
            obj.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
60
         /* Return the mergedPDF as a byte array using the ByteArrayOutputStream object */
61
            return destination.toByteArray();
62
          
63
        } catch (IOException e) {
64
            throw new Exception("Error occurred while merging pdf files", e);
65
        }
66
        
67
        
68
    }
69


70
}
71

mergeAndStorePDF- 此静态方法接受两个参数 ( 和 ),并且没有返回类型。阅读 Java 类中的注释,了解每一步。listPdfFileNamesmergedPdfFileName

mergePDFs - 此静态方法接受一个参数 (),并将返回类型为字节数组。这个字节数组实际上是字节数组格式的合并 PDF 文件。阅读 Java 类中的注释,了解每一步。base64PDF

步骤 3

image.png

拖放 SFTP 列表连接器,并在 SFTP 配置中添加 SFTP 凭据。将目录路径和文件名模式添加为 .这将从属性文件中提到的路径中检索所有 PDF 文件。{*.pdf}

步骤 4

image.png

接下来,将变量初始化为空白数组。此变量将包含所有 base64 编码的 PDF 字符串。在此之后添加一个选择组件,以检查有效负载是否为空(即,SFTP 列表连接器是否选取了任何文件)。如果未检索到任何文件,则只需记录一条消息“未找到文件”。否则,请使用组件循环访问检索到的所有 PDF 文件。base64PDF[]For-Each

步骤 5

image.png

接下来,如上图所示阅读每个 PDF,对其进行编码,并将其作为 base64 编码的字符串存储在变量中。 使用如下所示的方法对 PDF 进行编码。base64PDFtoBase64()dw::core::Binaries library

步骤 6 image.png

接下来,调用类的静态方法。 将 base64 编码的 PDF 字符串列表(存储在变量中)作为参数传递给该方法。 该方法将以字节数组格式返回串联的 PDF。将该字节数组编码为 base64 编码的字符串,并将其存储在变量中。mergePDFsMergeMultiplePDFbase64PDFmergePDFsmergePDFs

现在,构造 MimeType 的响应有效载荷。 解码 base64 编码的合并 PDF 并将其传递到内容字段中。如上图所示进行设置。multipart/form-dataContent-Typeapplication/pdf

步骤 7

image.png

将 MimeType 设置为 application/pdf。这会将合并的 PDF 作为 pdf 发送作为响应。您还可以将此有效负载存储在 SFTP 输出目录中。

输入 PDF

PDF1格式

image.png

PDF2格式

image.png

输出 PDF

image.png

合并的 PDF

合并的 PDF 将包含每个 PDF 包含的所有页面的总和。


目录
相关文章
|
1月前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
|
1月前
|
存储 安全 网络安全
Python编程--使用PyPDF解析PDF文件中的元数据
Python编程--使用PyPDF解析PDF文件中的元数据
|
3月前
|
Java
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
87 0
|
3月前
|
Python
[python]将多张图片合并为单个pdf文件
[python]将多张图片合并为单个pdf文件
|
5月前
|
Java Maven
使用Java合并PDF文档
使用Java合并PDF文档
203 0
|
5月前
|
Python
【代码】Python实现Excel数据合并
【代码】Python实现Excel数据合并
|
6月前
|
Python
Python 合并多个 PDF 文件并建立书签目录
Python 合并多个 PDF 文件并建立书签目录
69 1
|
存储
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
265 0
|
6月前
|
数据安全/隐私保护 Python
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)(下)
Python办公自动化【Word转换PDF、PDF读取内容、PDF合并文件、PDF拆分文件、PDF加密文件、PPT基本操作-增加幻灯片、增加内容】(六)-全面详解(学习总结---从入门到深化)
77 1
|
6月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
306 0