Java を使って PDF を結合、分割、並べ替える方法

はじめに

PDF はデジタル情報を保存や共有するために広く利用されています。PDF は情報の共有を容易にするだけでなく、使用するハードウェアやソフトウェアに関わらず、情報を確実に表示します。

PDF は優れたファイル形式ですが、数百ページにも及ぶ大きな PDF ファイルを扱う際に、実際にはごく一部のページだけが必要な時や、複数の PDF ファイルを 1 つのファイルに結合する必要がある時など、いくつかの課題も存在します。こうした課題に対処するには、xodo.comXodo PDF StudioApryse WebViewer などのアプリベースの PDF エディタを使用できます。ただし、プロセスの一部は依然として手動で行う必要があります。

より自動化されたアプローチとして、  Apryse SDK を使用することで、 PDF を複数のページに分割したり、複数の PDF を 1 つに結合したりするなど、様々な方法で PDF を操作できます。以下の例では Java を使用しますが、SDK は  C++、.NET、Python、Node.js などの他の言語やフレームワークでも利用可能です。

始め方

始めるのはかなり簡単です。

  1. Apryse Server SDK をダウンロードします。今回は Java PDF ライブラリを選択します。
  2. .zip ファイルからフォルダーを抽出します。
  3. 無料トライアルキーを入手してください。
  4. 以下のサンプル タスクを処理するために必要な完全なコードについては、ドキュメントをご覧ください。各タスクの具体的なコードのサンプルも添付しています。

準備が整ったので、実際に何ができるかいくつか例を挙げて見ていきましょう。このブログでは、以下の方法をご紹介します。

  • PDF を複数のページに分割する
  • 複数の PDF を 1 つに結合する
  • 2 ページごとに削除

PDF を複数のページに分割

PDF を複数のページに分割する必要がある場合があります。例えば、従業員のレポートを分割して、従業員ごとに個別のファイルを作成する場合などです。

そのために次のコードを使用します。

        // Sample 1 - Split a PDF document into multiple pages
        System.out.println("_______________________________________________");
        System.out.println("Sample 1 - Split a PDF document into multiple pages...");
        System.out.println("Opening the input pdf...");
        try (PDFDoc in_doc = new PDFDoc(input_path + "newsletter.pdf")) {
            in_doc.initSecurityHandler();
            int page_num = in_doc.getPageCount();
            for (int i = 1; i <= page_num; ++i) {
                try (PDFDoc new_doc = new PDFDoc()) {
                    new_doc.insertPages(0, in_doc, i, i, PDFDoc.InsertBookmarkMode.NONE, null);
                    String fname = "newsletter_split_page_" + i + ".pdf";
                    new_doc.save(output_path + fname, SDFDoc.SaveMode.REMOVE_UNUSED, null);
                    // output PDF new_doc
                    System.out.println("Done. Result saved in newsletter_split_page_" + i + ".pdf");
                }
            }
        } catch (Exception e2) {
            System.out.println(e2);
        }

複数の PDF を 1 つに結合

では、前の例を逆に考えてみましょう。従業員ごとに別々の PDF があり、それをマネージャー向けの 1 つのレポートに統合する必要があります。

次のコードを使用してこれらの PDF を結合してみましょう。

        // Sample 2 - Merge several PDF documents into one
        System.out.println("_______________________________________________");
        System.out.println("Sample 2 - Merge several PDF documents into one...");
        try (PDFDoc new_doc = new PDFDoc()) {
            new_doc.initSecurityHandler();
            int page_num = 15;
            for (int i = 1; i <= page_num; ++i) {
                System.out.println("Opening newsletter_split_page_" + i + ".pdf");
                String fname = "newsletter_split_page_" + i + ".pdf";
                try (PDFDoc in_doc = new PDFDoc(output_path + fname)) {
                    new_doc.insertPages(i, in_doc, 1, in_doc.getPageCount(), PDFDoc.InsertBookmarkMode.NONE, null);
                }
            }
            new_doc.save(output_path + "newsletter_merge_pages.pdf", SDFDoc.SaveMode.REMOVE_UNUSED, null);
            System.out.println("Done. Result saved in newsletter_merge_pages.pdf");
        } catch (Exception e2) {
            System.out.println(e2);
        }

2 ページごとに削除

なぜこんなことをする必要があるのか​​、と疑問に思うかもしれません。では、レポートの例をもう一度見てみましょう。マージされたレポートは、従業員ごとに個別のセクションで構成されています。各セクションには 2 つのページがあり、1 つは従業員の統計情報、もう 1 つは目標と進捗状況です。必要なのは各従業員の統計情報のページだけなので、次のコードを使って 2 ページごとにページを削除し、レポート作成に必要なページだけを残します。

        // Sample 3 - Delete every second page
        System.out.println("_______________________________________________");
        System.out.println("Sample 3 - Delete every second page...");
        System.out.println("Opening the input pdf...");
        try (PDFDoc in_doc = new PDFDoc(input_path + "newsletter.pdf")) {
            in_doc.initSecurityHandler();
            int page_num = in_doc.getPageCount();
            while (page_num >= 1) {
                PageIterator itr = in_doc.getPageIterator(page_num);
                in_doc.pageRemove(itr);
                page_num -= 2;
            }
            in_doc.save(output_path + "newsletter_page_remove.pdf", SDFDoc.SaveMode.NO_FLAGS, null);
            System.out.println("Done. Result saved in newsletter_page_remove.pdf...");
        } catch (Exception e2) {
            System.out.println(e2);
        }

その他の例

PDF ページの削除ページの切り取りなどの実行可能な操作の詳細な例については、ドキュメントを参照してください。

まとめ

Apryse PDF SDK を使って PDF を操作する様々な方法のうち、いくつかをご紹介しました。これらの例のコードを拡張することで、例えば、ページの分割、追加、削除、切り取り、並べ替え、あるいは PDF 内の単一ページまたは複数ページの回転など、PDF を操作するためのより複雑なソリューションを作成できます。

Apryse では無償トライアルを提供しています。是非お試しください。

Apryse 製品の詳細は、弊社 Web サイトをご確認ください。

記事参照:
© 2025 Apryse
How to Merge, Split, and Reorder PDFs Using Java

タイトルとURLをコピーしました