PDFlib

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

PDFlib サンプル集(クックブック)

本サンプルプログラムは、PDF 文書生成ライブラリーの実装である PDFlib の基本的な機能を実際のプログラムで紹介したものです。

本サイトでダウンロードした PDFlib は、一部機能の制限を除き、評価版として無償でお使いいただけます。

PDF の結合

複数の PDF 文書のページを結合し、1つのPDFファイルに出力するプログラムです。ただし、元のPDF文書に含まれる文書情報や、しおりや注釈の情報等のインタラクティブ要素(コンテンツ以外の要素)は、取込むことはできません。

  1. 出力PDF文書を開きます。
  2. 既存PDF文書を開き、ページ数を取得します。
  3. 既存PDF文書の全てのページを、出力PDF文書のページ上に配置していきます。また、配置する際にしおりを追加します。

PDF の結合方法と注意点については、テクニカルトピックの PDF の結合方法でも解説していますので、ご覧ください。

必要な製品:PDFlib+PDI/PDFlib PPS


/* $Id: starter_pdfmerge.java,v 1.13 2013/03/28 07:50:08 stm Exp $
 * PDFの結合:
 * 複数の PDF 文書のページを結合します。
 *
 * しおり等のインタラクティブ要素は失われます。
 *
 * 必要な製品 : PDFlib+PDI/PPS 9
 * 必要なデータ : PDF文書
 */

import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

public class starter_pdfmerge
{
    public static void main (String argv[])
    {
        /* 必要に応じてデータファイルがあるフォルダのパスを指定する */
        String searchpath = "../input";
        String outfile = "starter_pdfmerge.pdf";
        String title = "Starter PDF Merge";

        pdflib p = null;
        /* 既存PDF文書のファイル名を指定 */
        String pdffiles[] =
        {
            "PDFlib-real-world.pdf",
            "PDFlib-datasheet.pdf",
            "TET-datasheet.pdf",
            "PLOP-datasheet.pdf",
            "pCOS-datasheet.pdf"
        };
        int i;

        try {
            p = new pdflib();

            p.set_option("searchpath={" + searchpath + "}");

            /* load_font() 等でエラーが起きた場合、-1を返す */ 
            p.set_option("errorpolicy=return");

            /* 出力PDF文書を開く */
            if (p.begin_document(outfile, "") == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.set_info("Creator", "PDFlib Cookbook");
            p.set_info("Title", title + " $Revision: 1.13 $");

            /* 既存PDF文書数分ループする */
            for (i=0; i < pdffiles.length; i++)
            {
                int indoc, endpage, pageno, page;

                /* 既存PDF文書を開く */
                indoc = p.open_pdi_document(pdffiles[i], "");
                if (indoc == -1)
                {
                    System.err.println("Error: " + p.get_errmsg());
                    continue;
                }
                /* 既存PDF文書の、ぺージ数を取得する */
                endpage = (int) p.pcos_get_number(indoc, "length:pages");

                /* 既存PDF文書のページ分ループする */
                for (pageno = 1; pageno <= endpage; pageno++)
                {
                    /* 既存PDF文書のページを開く */
                    page = p.open_pdi_page(indoc, pageno, "");

                    if (page == -1)
                    {
                        System.err.println("Error: " + p.get_errmsg());
                        continue;
                    }
                    /* 出力PDFページをダミーのページサイズで作成する。 */
                    p.begin_page_ext(10, 10, "");

                    /* ファイル名でしおりを作成する */
                    if (pageno == 1)
                        p.create_bookmark(pdffiles[i], "");

                    /* 既存PDFページを出力PDFページ上に配置し、サイズを調整する */
                    p.fit_pdi_page(page, 0, 0, "adjustpage");
                    p.close_pdi_page(page);

                    p.end_page_ext("");
                }
                p.close_pdi_document(indoc);
            }
            p.end_document("");

        } catch (PDFlibException e) {
            System.err.print("PDFlib exception occurred:\n");
            System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
                ": " + e.get_errmsg() + "\n");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        } finally {
            if (p != null) {
                p.delete();
            }
        }
    }
}
(Dec 11, 2012 - Apr 24, 2014)