Java ZIP から PDF へ

ZIP ファイルは、複数のファイルを圧縮して 1 つのアーカイブにパッケージ化するためによく使用されます。これらのファイルを PDF 形式に変換すると、レポートの作成、ドキュメントのアーカイブ、標準化された形式での情報の共有など、さまざまな目的に役立ちます。このチュートリアルでは、Java を使用して ZIP ファイルを PDF ドキュメントに変換する方法について説明します。

ZIP を PDF に変換する理由

さまざまなユースケースでは、ZIP ファイルを PDF 形式に変換する必要がある場合があります。ここでは、変換の理由をいくつか説明します。

レポート生成: ZIP ファイルからデータを抽出し、フォーマットされたドキュメントで提示することで PDF レポートを生成します。

ドキュメントのアーカイブ: ZIP アーカイブに保存されている複数のドキュメントまたはファイルを 1 つの PDF に変換して、簡単にアーカイブおよび取得できるようにします。

ドキュメントの標準化: ZIP アーカイブ内のさまざまなファイル形式を統一された PDF 形式に変換して、共有と表示を容易にします。

ZIP から PDF へのコンバーター - Java 環境の構成

開発環境を構成して Java コードを実行し、機能をシステムに埋め込む必要があります。

  • Java Development Kit (JDK) がシステムにインストールされていることを確認してください。
  • Java 開発用の IntelliJ IDEA、Apache NetBeans などの統合開発環境 (IDE) があることを確認します。
  • さらに、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 クラスのインスタンスを作成します。
  • 2 番目のファイルから始めて、変換された 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 = new CompressorStreamFactory().createCompressorInputStream(inputfile);
            //アーカイブ入力ストリーム ais = 新しいアーカイブストリームファクトリ().アーカイブ入力ストリーム cis を作成します。

            // 圧縮のサポートが組み込まれている形式。Zip、RAR、JAR、7zipなど
            // CompressorInputStream を使用せずに入力ファイルを読み込む ArchiveInputStream
            //ArchiveInputStream ais = 新しい ArchiveStreamFactory().createArchiveInputStream(inputfile);

            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));

            // 2番目のファイルから変換されたPDF文書のリストをループします
           for (int i = 1; i < filesList.size(); i++) {
                // MergerクラスインスタンスのJoinメソッドを呼び出して、残りのソースファイルを1つずつ渡します。
                merger.join(filesList.get(i));
            }

            // マージされたPDFドキュメントを保存するには、MergerクラスインスタンスのSaveメソッドを呼び出します。
            merger.save("/tmp/output.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

無料評価ライセンス

無料の一時ライセンスをリクエストすると、ZIP ファイルを PDF 形式に変換したり、その他の API 機能を最大限に活用してテストしたりできます。

まとめ

この記事では、Java で ZIP ファイルを PDF に変換する方法をまとめています。ZIP アーカイブからファイルを抽出し、PDF 形式に変換してから、1 つの PDF ドキュメントに結合します。さらに、このプロセスは自動化し、特定の要件に基づいてカスタマイズすることもできます。不明な点がある場合は、フォーラム までお気軽にお問い合わせください。

よくある質問

ZIP ファイルから生成された PDF ドキュメントをカスタマイズできますか?

はい、ZIP ファイルから生成された PDF ドキュメントをカスタマイズできます。フォント、色、レイアウト、その他のスタイル要素の設定など、さまざまな操作を適用して、PDF ドキュメントの視覚的なプレゼンテーションを強化できます。また、必要に応じて、ヘッダー、フッター、透かし、注釈を追加することもできます。

すべてのファイルを変換するのではなく、ZIP アーカイブ内の特定のファイルを PDF に変換できますか?

はい、Java コードを適切に変更することで、ZIP アーカイブ内の特定のファイルを PDF に変換できます。名前、拡張子、その他の基準に基づいて特定のファイルを抽出し、抽出したファイルのみを PDF 形式に変換できます。これにより、要件に基づいて選択的な変換とカスタマイズが可能になります。

変換中に生成された PDF ドキュメントをパスワードで保護する方法はありますか?

はい、サポートされている機能には PDF 暗号化、パスワードの設定、権限、PDF ドキュメントの暗号化レベルなどが含まれるため、生成された PDF ドキュメントをパスワードで保護できます。

参照