パーソナルビジネスソフトとお役立ち情報のサイト
PDFlib入門 - PDF文書をプログラムで作ろう -

1. はじめに

 PDFlibは、Adobe PDF(Portable Document Format)形式ファイルをプログラムで生成するためのプログラムライブラリーです。文書を作るイメージで手順に従って関数を呼んでいけばPDF文書を生成するプログラムを容易に作成することができます。PDFlibはさまざまなOS上のさまざまな言語をサポートしているので、きっと日頃お使いになっている開発環境を使ってPDFを作成することができるでしょう。

 プログラムからPDF文書を作成できると、たとえばオンラインショップで購入した商品の名称や価格を織り込んだ注文書を作成したり、人事データから個人台帳を一定の書式で出力するなどPDF文書として扱いたいさまざまな書類をダイナミックに生成することができます。

 本稿ではできるだけサンプルを使って、PDFlibの概要をご紹介していきます。プログラム例はPHPを使って記述していますが、他の言語でも言語仕様による違いを除けば基本的な使い方は同じです。またあまり詳細には触れず、マニュアルでは把握しにくい基本的な事柄について説明するように心がけています。技術的な詳細については製品に添付されているマニュアルをご参照ください。(注)

2. 簡単なプログラム例

 恒例に従い、PDFlibを使うハローワールドスクリプトから始めましょう。本スクリプトは製品パッケージに付属しているサンプルhello.phpを日本語フォントを出力するように修正したhello-j.phpです。hello-j.phpのソースコードは以下のようになります。

ハローワールドソースコード

<?php
/* ハローワールドサンプルスクリプト hello-j.php
 * PDFlibパッケージのサンプルファイルを修正 
 */

// PDFオブジェクトを生成し、$pにそのハンドルを返す
  $p = new PDFlib();

/* 新しいドキュメントを開始し、出力先のファイル名を指定する
 * ファイル名を指定しない場合はメモリー上にドキュメントを出力する
 * エラーがあった場合はエラーメッセージを出力する
 */
  if($p->begin_document("", "") == 0) {
    die("Error: " . $p->get_errmsg());
  }

// ハイパーテキストのエンコーディングをAnsiに指定
  $p->set_parameter("hypertextencoding", "winansi");

//ドキュメント情報を設定
  $p->set_info("Creator", "hello-j.php");
  $p->set_info("Author", "Rainer Schaaf");
  $p->set_info("Title", "Hello world (PHP)!");

// サイズを指定して新しいページを始める
  $p->begin_page_ext(595, 842, "");

// CMap リソースのディレクトリを指定する
  $p->set_parameter("SearchPath", "../resource/cmap");

// フォント名、エンコーディングを指定してフォントをロードする
  $font = $p->load_font("HeiseiMin-W3", "Ext-RKSJ-H", "");
  if ($font == 0) {
    die("Error: " . $p->get_errmsg());
  }

// テキストの出力
  $p->setfont($font, 24.0);     // フォント及びサイズを指定
  $p->set_text_pos(100, 700);   // テキストの位置を指定
  $p->show("ハローワールド!"); // テキストを出力
  $p->continue_text("(ようこそPDFlibの世界へ)"); // 次行に出力

// 終了過程
  $p->end_page_ext("");         // ページを終了する
  $p->end_document("");         // ドキュメントを終了する

// PDFlib内部のバッファを取り出す
  $buf = $p->get_buffer();      // PDF出力を$bufに代入する
  $len = strlen($buf);          // $bufの長さを得る

// httpヘッダを生成する
  header("Content-type: application/pdf");
  header("Content-Length: $len");
  header("Content-Disposition: inline; filename=hello.pdf");

// PDFを出力する
  print $buf;

// PDFオブジェクトを消去し、リソースを解放する
  $p->delete();
?>
PHP5.1.2/PDFlib 7.0.0

スクリプトの解説

 始める前に、CMap リソースをこちらよりダウンロードし、指定したフォルダに入れてください。

 本スクリプトは「ハローワールド、(ようこそPDFlibへの世界へ) 」というテキストをPDF文書として出力するものです。

 まず全体をざっと見ると本スクリプトが下記のように一連の手順に従っているのがわかります。


  $p = new PDFlib();                   // PDFオブジェクトを生成
    $p->begin_document("", "")         // 新しいドキュメントを始める
      $p->begin_page_ext(595, 842, "");// 新しいページを始める

        (処理を実行する)

      $p->end_page_ext("");            // ページを終了する
    $p->end_document("");              // ドキュメントを終了する
  $p->delete();                        // PDFオブジェクトを消去
PHP5.1.2/PDFlib 7.0.0


 new PDFlib() でPDFオブジェクトを開き、次いでbegin_document()、begin_page_ext()でそれぞれドキュメント、ページを開きテキストなどのPDF要素を出力し、ページ、ドキュメント、PDFオブジェクトの順で閉じていくというのが共通の手順となります。物理的なドキュメントの作成手順と似ていますね。

 本スクリプトの主たる処理はテキストの出力ですが、これはload_font()などのフォントの設定、次いでshow()などによる出力という手順を踏みます。テキストの出力については後で詳しく触れます。

 begin_document()では、ドキュメントの開始を設定するとともに第1パラメータでPDF文書の出力先ファイル名を指定します。本例のようにファイル名を指定しないとPDF出力はPDFlib内部のバッファに蓄積され、後半の $buf = $p->get_buffer(); のようにget_buffer()によって変数に取り出すことができます。PHPなどを使ったウェブアプリケーションではこのようにファイルを作成しないでメモリー上でPDF出力を処理できると、パフォーマンス上、またウェブ管理やセキュリティ上からも有利といえます。

 本スクリプトによるPDF出力例は、このように(PDFファイル)になります。www.pdflib.comというロゴが大きく出力されているのはPDFlib評価版で出力しているためです。正規にライセンスを購入し、ライセンスキーを設定するとロゴが出力されなくなります。

PDFlib6とPDFlib7との相違点

 また、PDFlib7にリソースしたことにより、CMapリソースが新たに必要となります。こちらよりダウンロードし、指定したフォルダに入れてください。PDFlib7ではCMapリソースを指定することにより日本語の表示が可能となります。(フォント名も変更されています。)

(Nov 10, 2006)







■PDFlibの製品関連情報については、こちらの目次を参照してください。



■文中のマニュアルの参照は、PDFlib7の英語版チュートリアルマニュアルに基づいています。














■サンプルに関しましては、PDFlibクックブックも参考にして下さい。


■PDFlibをインストールすると各バインドのサブディレクトリーに代表的な機能の使い方を示すサンプルプログラムが配置されます。












































































































■本ファイルはPDF1.6で出力されているので、Acrobat7以前のバージョンのAcrobatで表示しようとすると警告メッセージが表示されることがあります。