PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

PDF の結合方法

1) はじめに

PDFlib 製品の1つである PDFlib+PDIを使用して複数の PDF ファイルを1つに結合する方法をご紹介します。

2) PDF の結合方法

PDFlib+PDI には「PDFを結合する」機能はありませんが、複数の既存のPDFページをインポートし、新規のPDFページ上に配置することで、PDF の結合を実現します。基本的な処理の流れは下記のとおりです。(今回は、Java を使用して記述しています。)

    
    /* 既存PDF文書のファイル名を指定 */
    String pdffiles[] =
    {
        "PDFlib-real-world.pdf",
        "PDFlib-datasheet.pdf",
        "TET-datasheet.pdf",
    };
               ・・・
    
    /* PDF オブジェクトを生成 */
    p = new pdflib();
    /* 新規PDF文書を開く */
    p.begin_document(outfile, "")
    
    /* 既存 PDF 文書が複数ある場合は、必要分繰り返す */
    for (i=0; i < pdffiles.length; i++)
    {
        /* 既存 PDF 文書を開く */
        indoc = p.open_pdi_document(pdffiles[i], "");
                   
        /* 既存 PDF 文書のぺージ数を pCOS 関数で取得する */
        endpage = (int) p.pcos_get_number(indoc, "length:pages");
    
        /* 既存 PDF 文書が複数ページがある場合、必要分繰り返す */
        for (pageno = 1; pageno <= endpage; pageno++)
        {
            /* 既存 PDF ページを開く */
            page = p.open_pdi_page(indoc, pageno, "");
            /* 新規 PDF ページをダミーのページサイズで作成する。 */
            p.begin_page_ext(10, 10, "");
    
            /* 新規 PDF ページ上に既存PDFページをインポートし、サイズを
             * 調整する 
             */
            p.fit_pdi_page(page, 0, 0, "adjustpage");
    
            /* 既存 PDF ページを終了する */
            p.close_pdi_page(page);
            /* 新規 PDF ページを終了する
            p.end_page_ext("");
        }
        /* 既存 PDF 文書を終了する */
        p.close_pdi_document(indoc);
    }
    /* 新規 PDF 文書を終了する */
    p.end_document("");
    

完全なサンプルプログラムは、PDFlibサンプル集(クックブック)の PDF の結合で公開しています。Java、PHP のサンプルがありますのでご覧ください。

3) PDF の結合における注意点

PDFlib+PDI で既存の PDF ページからインポートできるのは、ページのコンテンツ部分のみです。リンク、しおり、注釈、フォームフィールドなどの、インタラクティブ要素は、インポートされません。

既存 PDF に、どのようなインタラクティブ要素が含まれているか、あらかじめ分かっている場合は、PDFlib+PDI に含まれる pCOS インターフェース の機能により、その情報を取得して PDFlib で新規の PDF に生成することが可能です。

pCOS インターフェースを使用したインタラクティブ要素の取得方法と、新規 PDF への生成については後述します。

4) pCOS パスによるインタラクティブ要素の取得

PDFlib 製品に含まれている pCOS インターフェースには、pCOSパスと呼ばれる PDF からページコンテンツ以外の属性情報を取得する擬似オブジェクトがあります。これを使用してインタラクティブ要素を取得することができます。

pCOS パスを使用したインタラクティブ要素取得のサンプルプログラムついては、ダウンロードページまたは、PDFlib pCOS サンプル集(クックブック)で Java、PHP のソースを公開していますのでご覧ください。

なお、pCOS パスが用意されていないインタラクティブ要素を取得したい場合、PDFの仕様に沿って取得することはできますが、PDF の仕様に関する知識が必要になります。

技術情報では、PDF の構造を分析し、出力するツール 「PDFinfo」 を公開しています。PDF にどんなインタラクティブ要素が含まれているか知りたい。pCOSパスの用意がないものについて、キーワードとなる情報を取得したい。といった場合にお役立てください。

5) 新規PDF へのインタラクティブ要素の生成

上記で取得したインタラクティブ要素を、PDFlibを使用して新規 PDF 上に生成します。サンプルプログラムについては、 ダウンロードページまたは、 PDFlib サンプル集(クックブック)で Java、PHP のソースを公開していますのでご覧ください。

6) おわりに

PDFlib 製品で PDF を結合する方法をご紹介しましたが、この方法を使用して、複数のページからなる PDF を1ページごとに分割することも可能です。

PDFlib 製品はご購入前でも、ダウンロードページからダウンロードし、評価版として試用することができます。評価版の状態でも、いくつかの制限を除き製品版と同様にお使いいただけますので、ぜひ PDFlib 製品をお試しください。

(Aug 22, 2016 - )