Java ZIP 转 PDF

ZIP 文件通常用于将多个文件压缩并打包成一个档案。将这些文件转换为 PDF 格式可用于各种目的,例如创建报告、归档文档或以标准化格式共享信息。在本教程中,我们将探讨如何使用 Java 将 ZIP 文件转换为 PDF 文档。

为什么要将 ZIP 转换为 PDF?

您可能需要将 ZIP 文件转换为 PDF 格式以满足不同的使用情况。下面我们讨论一下转换的几个原因:

报告生成:通过从 ZIP 文件中提取数据并将其显示在格式化的文档中来生成 PDF 报告。

文档归档:将存储在 ZIP 档案中的多个文档或文件转换为单个 PDF,以便于归档和检索。

文档标准化:将 ZIP 存档中的不同文件格式转换为统一的 PDF 格式,以便于共享和查看。

ZIP 到 PDF 转换器 - Java 环境配置

您必须配置开发环境运行 Java 代码并将该功能嵌入到您的系统中。

  • 确保您的系统上安装了 Java 开发工具包 (JDK)。
  • 确保您有一个用于 Java 开发的集成开发环境 (IDE),例如 IntelliJ IDEA、Apache NetBeans。
  • 此外,下载 Conholdate.Total for Java 的 JAR 文件或使用以下 Maven 配置:
<dependency>
<groupId>com.conholdate</groupId>
<artifactId>conholdate-total</artifactId>
<version>24.2</version>
<type>pom</type>
</dependency>

使用 Java 将 ZIP 转换为 PDF

以下步骤演示如何使用 Java 将 ZIP 转换为 PDF:

  • 使用输入的 ZIP 文件初始化 ZipInputStream 对象。
  • 指定保存提取文件的输出目录。
  • 遍历输入 ZIP 文件中的每个文件并将其提取到输出目录。
  • 维护一个临时列表来存储从解压文件夹中提取的文件的名称。
  • 从解压的文件夹中获取所有文件的列表(包括它们的完整路径)。
  • 遍历每个提取的文件并将其转换为 PDF 格式。
  • 合并转换后的 PDF 文件。
  • 使用临时列表中的第一个输入 PDF 文档创建 Merger 类的实例。
  • 从第二个文件开始,遍历转换后的 PDF 文档列表。
  • 调用Merger类实例的save方法保存合并后的PDF文档。

以下示例代码展示了如何使用 Java 将 ZIP 转换为 PDF:

// 支持的文件格式:https://docs.groupdocs.com/conversion/java/supported-document-formats/
// 与 OpenJDK 17 兼容

package com.mycompany.asposejavatest;

import java.io.*;
import java.util.ArrayList;
import org.apache.commons.compress.archivers.*;
import org.apache.commons.compress.compressors.*;
import com.groupdocs.conversion.*;
import com.groupdocs.conversion.Converter;
import com.groupdocs.conversion.options.convert.PdfConvertOptions;
import com.groupdocs.conversion.contracts.PossibleConversions;
import com.groupdocs.conversion.options.convert.ConvertOptions;
import com.groupdocs.merger.*;
import com.groupdocs.merger.Merger;

public class AsposeJavaTest {

    public static void main(String[] args) {

        try {
            InputStream inputfile = new BufferedInputStream(new FileInputStream("input.zip"));

            // 适用于单独存档和压缩的格式。例如 tar.gz tar.bz tar.xz 使用
            // CompressorInputStream 然后使用 ArchiveInputStream 加载输入文件。
            //CompressorInputStream cis = 新的 CompressorStreamFactory().createCompressorInputStream(输入文件);
            //ArchiveInputStream ais = 新的ArchiveStreamFactory().createArchiveInputStream(cis);

            // 适用于内置压缩支持的格式。例如 Zip RAR JAR 7zip
            // ArchiveInputStream 加载没有 CompressorInputStream 的输入文件
            //ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream(输入文件);

            ArchiveEntry entry = ais.getNextEntry();

            File outputDir = new File("/tmp/output");
            if (!outputDir.exists()) {
                outputDir.mkdirs();
            }

            while (entry != null) {
                String filePath = outputDir.getAbsolutePath() + File.separator + entry.getName();
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
                byte[] bytesIn = new byte[1024];
                int read;

                while ((read = ais.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read);
                }

                ais.close();
                bos.close();
                entry = ais.getNextEntry();
            }

            // 临时列表,用于保存从解压文件夹中提取的文件的名称
            ArrayList<String> filesList = new ArrayList<>();

            // 从解压的文件夹中获取所有文件列表(带有完整路径)
            File[] files = outputDir.listFiles();

            // 循环遍历每个解压的文件并将每个文件转换为 PDF
           for (File file : files) {
                // 加载解压的文件
                Converter converter = new Converter(file.getAbsolutePath());
                // 设置 PDF 格式的转换选项				
                PdfConvertOptions convertOptions = new PdfConvertOptions();                
                // 转换为 PDF 格式
                String outPath = outputDir.getAbsolutePath() + File.separator + file.getName()+ ".pdf";
                converter.convert(outPath, convertOptions);
                // 转换为 PDF 后将文件名添加到临时列表
                filesList.add(outPath);
            }

            // 使用 GroupDocs.Merger API 合并 PDF 文件
            // 在临时列表中实例化与第一个输入 PDF 文档的合并
            Merger merger = new Merger(filesList.get(0));

            // 从第二个文件开始循环转换后的 PDF 文档列表
           for (int i = 1; i < filesList.size(); i++) {
                // 调用Merger类实例的Join方法并逐个传递剩余的源文件
                merger.join(filesList.get(i));
            }

            // 调用Merger类实例的Save方法保存合并的PDF文档
            merger.save("/tmp/output.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

免费评估许可证

您可以通过申请 免费临时许可证 将 ZIP 文件转换为 PDF 格式,并充分测试其他 API 功能。

包起来

本文总结了如何使用 Java 将 ZIP 文件转换为 PDF。它涉及从 ZIP 存档中提取文件、将其转换为 PDF 格式,然后将其合并为单个 PDF 文档。此外,此过程可以进一步自动化并根据您的特定要求进行定制。如有任何疑问,请随时通过 forum 与我们联系。

常见问题解答

我可以自定义从 ZIP 文件生成的 PDF 文档吗?

是的,您可以自定义从 ZIP 文件生成的 PDF 文档。您可以应用不同的操作,例如设置字体、颜色、布局和其他样式元素,以增强 PDF 文档的视觉呈现效果。您还可以根据需要添加页眉、页脚、水印和注释。

我可以将 ZIP 档案中的特定文件转换为 PDF,而不是转换所有文件吗?

是的,您可以通过相应地修改 Java 代码将 ZIP 存档中的特定文件转换为 PDF。您可以根据文件的名称、扩展名或其他条件提取特定文件,然后仅将提取的文件转换为 PDF 格式。这允许根据您的要求进行选择性转换和自定义。

有没有办法在转换过程中对生成的 PDF 文档进行密码保护?

是的,您可以对生成的 PDF 文档进行密码保护,因为支持的功能包括 PDF 加密、设置密码、权限和 PDF 文档的加密级别。

也可以看看