PDFlib

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

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

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

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

インポートしたページの縮小

インポートした A4サイズのPDFページを、A5サイズに縮小し、出力文書に配置するプログラムです。ページの内容は変更しません。

  1. 出力PDF文書を開きます。
  2. 既存PDF文書(A4)を開き、ページ数を取得します。
  3. 出力PDFページをA5サイズで作成し、既存PDF文書の全てのページをA5サイズに縮小し配置します。

既存PDFページを縮小し配置するには、fit_pdi_page() の、第4パラメータに boxsize={421 595} でA5サイズの枠を指定します。そして fitmethod=meet で既存PDFページの内容を縦横比を変えずに縮小し、この枠にはめ込みます。

第2、第3パラメータは、上記で指定した枠を配置するための参照点の座標(x,y)であり、出力PDFページの左下隅(0,0)に、枠の左下隅が重なるように配置されます。

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


/* $Id: scale_down_imported_pages.java,v 1.3 2013/01/15 10:12:02 stm Exp $
 * インポートしたページの縮小:
 * インポートした PDF の A4 のページを A5 のページとして出力文書に配置します。
 * 
 * ページの内容は変更せずに出力します。
 * ページを配置する際に、A4 から A5 に縮小します。 
 *
 * 必要な製品 : PDFlib+PDI/PPS 9
 * 必要なデータ : PDF文書
 */
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

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

        pdflib p = null;
        String pdffile = "pCOS-datasheet.pdf";
        int indoc, pageno, endpage, page;

        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.3 $");

            /* 既存PDF文書(A4サイズ)を開く */
            indoc = p.open_pdi_document(pdffile, "");
            if (indoc == -1)
                throw new Exception("Error: " + p.get_errmsg());

            /* 既存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)
                    throw new Exception("Error: " + p.get_errmsg());

                /* 出力PDFページをA4サイズ(210mm x 297mm)で作成する */
                p.begin_page_ext(595, 842, "");

                /* 既存PDF文書ページを縮小無しで配置する */
                p.fit_pdi_page(page, 0, 0, "");

                p.end_page_ext("");

                p.close_pdi_page(page);
            }
            /* --------------- A5サイズに縮小し配置 ----------------- */

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

                if (page == -1)
                    throw new Exception("Error: " + p.get_errmsg());

                /* 出力PDFページをA5サイズ(148mm x 210mm)で作成する */
                p.begin_page_ext(421, 595, "");

                /* 既存PDF文書ページをA5サイズに縮小し配置する */
                p.fit_pdi_page(page, 0, 0, "boxsize={421 595} fitmethod=meet");
            
                p.end_page_ext("");
            
                p.close_pdi_page(page);
            }

            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 30, 2014)