PDFlib 入門 - PDF文書をプログラムで作ろう -
1. はじめに
PDFlibは、Adobe PDF(Portable Document Format)形式ファイルをプログラムで生成するためのプログラムライブラリーです。文書を作るイメージで手順に従って関数を呼んでいけばPDF文書を生成するプログラムを容易に作成することができます。PDFlibはさまざまなOS上のさまざまな言語をサポートしているので、きっと日頃お使いになっている開発環境を使ってPDFを作成することができるでしょう。プログラムからPDF文書を作成できると、たとえばオンラインショップで購入した商品の名称や価格を織り込んだ注文書を作成したり、人事データから個人台帳を一定の書式で出力するなどPDF文書として扱いたいさまざまな書類をダイナミックに生成することができます。
本稿ではできるだけサンプルを使って、PDFlibの概要をご紹介していきます。プログラム例はPHPを使って記述していますが、他の言語でも言語仕様による違いを除けば基本的な使い方は同じです。またあまり詳細には触れず、マニュアルでは把握しにくい基本的な事柄について説明するように心がけています。技術的な詳細については製品に添付されているマニュアルをご参照ください。(注)
2. 準備
早速簡単なプログラムの説明に入りたいところですが、まず、 PDFlib を利用できる環境を整えたいと思います。ここでは、PHP を例としていますので、PHP での利用方法を簡単に説明します。
- ダウンロードした PDFlib のファイルを展開します。
- bind フォルダー内に php フォルダが見つかります。ここには、各 PHP のバージョン毎に使用するファイルが含まれています。ファイル名は、 Windows の場合、libpdf_php.dll、Linux 等の場合は、libpdf_php.so です。例えば、 Windows 上で PHP バージョン 5.3 を使用している場合は、bind/php/php-530/libpdf_php.dll を使用します。
- このファイルを php.ini (PHP のコンフィグレーションファイル) の extension_dir= で指定されたフォルダにコピーします。
- php.ini の extention= のあるセクションに extention=libpdf_php.dll (Windows の場合) を追加します。
- ウェブサーバーを再起動します。
3. 簡単なプログラム例
恒例に従い、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(); ?>
スクリプトの解説
始める前に、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オブジェクトを消去
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リソースを指定することにより日本語の表示が可能となります。(フォント名も変更されています。)![]() |
![]() |
![]() |




