そのまんま!

CXXI. PDF 関数

導入

PHP の PDF 関数を使用すると、 Thomas Merz が作成して現在は PDFlib GmbH がメンテナンスしている PDFlib ライブラリを使用した PDF ファイルが作成できるようになります。

本節のドキュメントは、PDFlib ライブラリで利用可能な関数の概要のみを 説明することを意図しており、完全なリファレンスではありません。 ここで扱う各関数の完全で詳細な説明については、PDFlib GmbH が配布する すべての PDFlib パッケージに含まれている PDFlib リファレンスマニュアルを 参照ください。このドキュメントは、PDFlib の機能に関する 概要を非常に良くまとめており、全ての関数に関する最新のドキュメントが 含まれています。

はじめの一歩としては、 PDFlib 配布パッケージに含まれるサンプルプログラムを眺めることをお勧めします。 このサンプルでは、基本的なテキスト、ベクター、グラフィックスの出力だけではなく、 PDF インポート機能 (PDI) のような高度な関数も扱っています。

PDFlib のほとんどの関数と PHP モジュール内の関数の名前とパラメータは共通になっています。 別途設定されていない限り、 全ての長さと座標は、Postscript のポイント数で計られます。通常、1 インチあたり 72 Postscript ポイントですが、これは出力解像度に依存します。 使用する座表系に関するより詳細な説明については、PDFlib の配布物に含まれる PDFlib リファレンスマニュアルを参照ください。

PDFlib のバージョン 6 では、PHP 4 用の関数指向の API に加えて PHP 5 用のオブジェクト指向の API も提供しています。 主な違いは以下のとおりです。

PHP 4 では、まず最初に以下のような関数コールによって PDF リソースを取得しなければなりませんでした。

$p = PDF_new().

この PDF リソースは、それ以降のすべての関数コールの 第一パラメータとして次のように使用されます。

PDF_begin_document($p, "", "").

しかし、PHP 5 では PDFlib オブジェクトは次のように作成します。

$p = new PDFlib().

このオブジェクトは、PDFlib API のすべての関数をメソッドとして 提供しています。たとえば次のようになります。

$p->begin_document("", "").

さらに、PHP 5 の新機能である例外についても PDFlib 6 以降でサポートしています。

詳細な情報は、以下のを参照ください。

注意: 外部 PDF ライブラリを使用しない、他のフリーな PDF ジェネレータに 関心がある場合には、 関連する FAQ を参照してください。

要件

PDFlib Lite はオープンソースで公開されていますが、 フリーで使用するためにはいくつかの条件があります。 PDFlib Lite は、PDFlib の機能の一部をサポートしています。詳細は PDFlib のウェブサイトを参照ください。 PDFlib の完全版は http://www.pdflib.com/products/pdflib-family/ でダウンロード可能ですが、 商用する場合はライセンスを購入する必要があります。

古いバージョンの PDFlib に関する問題

2000 年 3 月 9 日以降のバージョンの PHP 4 では、3.0 より古いバージョンの PDFlib をサポートしていません。

PDFlib 4.0 以降は、PHP 4.3.0 以降でサポートされています。

インストール手順

この PECL 拡張 モジュールは PHP にバンドルされていません。 この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 http://pecl.php.net/package/pdflib.

PHP < 4.3.9 で以下の関数が動作するようにするには、 --with-pdflib[=DIR] を指定して PHP をコンパイルする必要があります。DIR は PDFlib のベースインストールディレクトリで、デフォルトは /usr/local です。

リソース型

PDF_new() は新しい PDFlib オブジェクトを作成します。 これはほとんどの PDF 関数で必要となります。

廃止された PDFlib 関数についての注意

PHP 4.0.5 以降、PHPlib 用の PHP 拡張モジュールは、PDFlib GmbH から 正式にサポートされています。これにより、PDFlib リファレンスマニュアルに記述された全ての関数が PHP4 で全く同じ意味、 同じパラメータでサポートされています。しかし、PDFlib バージョン 5.0.4 以降ではすべてのパラメータを指定する必要があります。互換性を保つために PDFlib サポート関数ではまだ古い関数もサポートしていますが、上記の ように新しいバージョンに置換される予定です。PDFlib GmbH は、これらの 古い関数を使用した場合に生じた際に生じた問題に関してはサポートを 行いません。このドキュメントではそれらの関数については「古い関数」と 明記しており、かわりに使用する関数について説明しています。

多くの関数の使用法は簡単です。最も困難なのは、最初に pdf ドキュメントを作成する場合でしょう。次の例は、入門の際の 助けとなるはずです。この例は PHP 4 を対象に開発されており、 1 ページを有するファイル test.pdf が作成されます。 ドキュメントにはフィールドの内容についての情報が定義されており、 Helvetica-Bold フォントを読み込んで "Hello world! (says PHP)" というテキストを出力します。

例 1. PHP 4 用の PDFlib での Hello World の例

<?php
$p
= PDF_new();

/*  新しい PDF ファイルをオープンし、ディスク上に PDF を作成するためにファイル名を挿入します */
if (PDF_begin_document($p, "", "") == 0) {
    die(
"Error: " . PDF_get_errmsg($p));
}

PDF_set_info($p, "Creator", "hello.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "Hello world (PHP)!");

PDF_begin_page_ext($p, 595, 842, "");

$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");

PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "Hello world!");
PDF_continue_text($p, "(says PHP)");
PDF_end_page_ext($p, "");

PDF_end_document($p, "");

$buf = PDF_get_buffer($p);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print
$buf;

PDF_delete($p);
?>

以下の例は PHP 5 用の PDFlib 配布物で使用するためのものです。PHP 5 の 新機能である例外処理やオブジェクトのカプセル化機能を使用しています。 この例では hello.pdf という名前の 1 ページの ファイルを作成します。 ドキュメントにはフィールドの内容についての情報が定義されており、 Helvetica-Bold フォントを読み込んで "Hello world! (says PHP)" というテキストを出力します。

例 2. PHP 5 用の PDFlib での Hello World の例

<?php

try {
    $p = new PDFlib();

    /*  新しい PDF ファイルをオープンし、ディスク上に PDF を作成するためにファイル名を挿入します */
    if ($p->begin_document("", "") == 0) {
        die("Error: " . $p->get_errmsg());
    }

    $p->set_info("Creator", "hello.php");
    $p->set_info("Author", "Rainer Schaaf");
    $p->set_info("Title", "Hello world (PHP)!");

    $p->begin_page_ext(595, 842, "");

    $font = $p->load_font("Helvetica-Bold", "winansi", "");

    $p->setfont($font, 24.0);
    $p->set_text_pos(50, 700);
    $p->show("Hello world!");
    $p->continue_text("(says PHP)");
    $p->end_page_ext("");

    $p->end_document("");

    $buf = $p->get_buffer();
    $len = strlen($buf);

    header("Content-type: application/pdf");
    header("Content-Length: $len");
    header("Content-Disposition: inline; filename=hello.pdf");
    print $buf;
}
catch (PDFlibException $e) {
    die("PDFlib exception occurred in hello sample:\n" .
       "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
       $e->get_errmsg() . "\n");
}
catch (Exception $e) {
    die($e);
}
$p = 0;
?>

目次
PDF_activate_item -- 構造体要素やその他の内容をアクティブにする
PDF_add_annotation -- 注記を追加する [古い関数]
PDF_add_bookmark -- ブックマークを現在のページに追加する [古い関数]
PDF_add_launchlink -- 現在のページに起動用注記を追加する [古い関数]
PDF_add_locallink -- 現在のページにリンク注記を追加する [古い関数]
PDF_add_nameddest -- 移動先を作成する
PDF_add_note -- 現在のページに注記を追加する [古い関数]
PDF_add_outline -- 現在のページにブックマークを追加する [古い関数]
PDF_add_pdflink -- 現在のページにリンク注記を追加する [古い関数]
PDF_add_table_cell -- 新しいテーブル、あるいは既存のテーブルにセルを追加する
PDF_add_textflow -- Textflow を作成するか、既存の Textflow にテキストを追加する
PDF_add_thumbnail -- 現在のページにサムネイルを追加する
PDF_add_weblink -- 現在のページに Web リンクを追加する [古い関数]
PDF_arc -- 反時計回りに円弧を描く
PDF_arcn -- 時計回りに円弧を描く
PDF_attach_file -- 現在のページに添付ファイルを追加する [古い関数]
PDF_begin_document -- 新しい PDF ファイルを作成する
PDF_begin_font -- Type 3 フォント定義を開始する
PDF_begin_glyph -- Type 3 フォントのグリフ定義を開始する
PDF_begin_item -- 構造体要素あるいはその他の内容をオープンする
PDF_begin_layer -- レイヤーを開始する
PDF_begin_page_ext -- 新規ページを開始する
PDF_begin_page -- 新規ページを開始する [古い関数]
PDF_begin_pattern -- パターン定義を開始する
PDF_begin_template_ext -- テンプレート定義を開始する
PDF_begin_template -- テンプレート定義を開始する [古い関数]
PDF_circle -- 円を描く
PDF_clip -- 現在のパスに切り取る
PDF_close_image -- 画像を閉じる
PDF_close_pdi_page -- ページハンドルを閉じる
PDF_close_pdi -- PDF ドキュメント入力を閉じる [古い関数]
PDF_close -- pdf ドキュメントを閉じる [古い関数]
PDF_closepath_fill_stroke -- 現在のパスを閉じ、塗りつぶし、輪郭を描く
PDF_closepath_stroke -- パスを閉じ、パスに沿って線を描く
PDF_closepath -- 現在のパスを閉じる
PDF_concat -- 行列を CTM に追加する
PDF_continue_text -- 次の行にテキストを出力する
PDF_create_3dview -- 3D ビューを作成する
PDF_create_action -- オブジェクトやイベントに対するアクションを作成する
PDF_create_annotation -- 矩形の注記を作成する
PDF_create_bookmark -- ブックマークを作成する
PDF_create_field -- フォームフィールドを作成する
PDF_create_fieldgroup -- フォームフィールドグループを作成する
PDF_create_gstate -- 画像状態オブジェクトを作成する
PDF_create_pvf -- PDFlib 仮想ファイルを作成する
PDF_create_textflow -- textflow オブジェクトを作成する
PDF_curveto -- ベジエ曲線を描く
PDF_define_layer -- レイヤー定義を作成する
PDF_delete_pvf -- PDFlib 仮想ファイルを削除する
PDF_delete_table -- テーブルオブジェクトを削除する
PDF_delete_textflow -- textflow オブジェクトを削除する
PDF_delete -- PDFlib オブジェクトを削除する
PDF_encoding_set_char -- グリフ名や Unicode 値を追加する
PDF_end_document -- PDF ファイルを閉じる
PDF_end_font -- Type 3 フォント定義を終了する
PDF_end_glyph -- Type 3 フォントのグリフ定義を終了する
PDF_end_item -- 構造体要素やその他の内容を閉じる
PDF_end_layer -- すべてのアクティブなレイヤーを無効にする
PDF_end_page_ext -- ページを終了する
PDF_end_page -- ページを終了する
PDF_end_pattern -- パターンを終了する
PDF_end_template -- テンプレートを終了する
PDF_endpath -- 現在のパスを終了する
PDF_fill_imageblock -- 画像ブロックをさまざまなデータで塗りつぶす
PDF_fill_pdfblock -- PDF ブロックをさまざまなデータで塗りつぶす
PDF_fill_stroke -- パスを塗りつぶし、パスの輪郭を描く
PDF_fill_textblock -- テキストブロックをさまざまなデータで塗りつぶす
PDF_fill -- 現在のパスを塗りつぶす
PDF_findfont -- 後で使用するフォントを準備する [古い関数]
PDF_fit_image -- 画像やテンプレートを配置する
PDF_fit_pdi_page -- インポートした PDF ページを配置する
PDF_fit_table -- テーブルをページに配置する
PDF_fit_textflow -- textflow を矩形領域に配置する
PDF_fit_textline -- 1 行分のテキストを配置する
PDF_get_apiname -- 成功しなかった API 関数の名前を取得する
PDF_get_buffer -- PDF 出力バッファを取得する
PDF_get_errmsg -- エラーテキストを取得する
PDF_get_errnum -- エラー番号を取得する
PDF_get_font -- フォントを取得する [古い関数]
PDF_get_fontname -- フォント名を取得する [古い関数]
PDF_get_fontsize -- フォント処理 [古い関数]
PDF_get_image_height -- 画像の高さを取得する [古い関数]
PDF_get_image_width -- 画像の幅を取得する [古い関数]
PDF_get_majorversion -- メジャーバージョン番号を取得する [古い関数]
PDF_get_minorversion -- マイナーバージョン番号を取得する [古い関数]
PDF_get_parameter -- 文字列パラメータを取得する
PDF_get_pdi_parameter -- PDI 文字列パラメータを取得する [古い関数]
PDF_get_pdi_value -- 数値型の PDI パラメータを取得する [古い関数]
PDF_get_value -- 数値型のパラメータを取得する
PDF_info_font -- 読み込まれたフォントについての詳細情報を問い合わせる
PDF_info_matchbox -- マッチボックスの情報を問い合わせる
PDF_info_table -- テーブルの情報を取得する
PDF_info_textflow -- textflow の状態を問い合わせる
PDF_info_textline -- テキストの行のフォーマットを行い、メトリクスを問い合わせる
PDF_initgraphics -- 描画状態をリセットする
PDF_lineto -- 線を描く
PDF_load_3ddata -- 3D モデルを読み込む
PDF_load_font -- フォントを検索し、準備する
PDF_load_iccprofile -- ICC プロファイルを検索し、準備する
PDF_load_image -- 画像ファイルをオープンする
PDF_makespotcolor -- スポット色を作成する
PDF_moveto -- 現在の位置を設定する
PDF_new -- PDFlib オブジェクトを作成する
PDF_open_ccitt -- raw CCITT イメージをオープンする [古い関数]
PDF_open_file -- PDF ファイルを作成する [古い関数]
PDF_open_gif -- GIF イメージをオープンする [古い関数]
PDF_open_image_file -- ファイルからイメージを読み込む [古い関数]
PDF_open_image -- イメージデータを使用する [古い関数]
PDF_open_jpeg -- JPEG イメージをオープンする [古い関数]
PDF_open_memory_image -- PHP のイメージ関数で作成されたイメージをオープンする [未サポート]
PDF_open_pdi_page -- ページを準備する
PDF_open_pdi -- PDF ファイルをオープンする [古い関数]
PDF_open_tiff -- TIFF イメージをオープンする [古い関数]
PDF_pcos_get_number -- number あるいは boolean 型の pCOS パスの値を取得する
PDF_pcos_get_stream -- stream、fstream あるいは string 型の pCOS パスの内容を取得する
PDF_pcos_get_string -- name、string あるいは boolean 型の pCOS パスの値を取得する
PDF_place_image -- イメージをページ上に置く [古い関数]
PDF_place_pdi_page -- PDF ページを置く [古い関数]
PDF_process_pdi -- インポートされた PDF ドキュメントを処理する
PDF_rect -- 矩形を描く
PDF_restore -- 描画状態を復元する
PDF_resume_page -- ページを再開する
PDF_rotate -- 座標系を回転する
PDF_save -- 描画状態を保存する
PDF_scale -- スケールを設定する
PDF_set_border_color -- 注記の周りの境界色を設定する [古い関数]
PDF_set_border_dash -- 注記の周りの境界の破線形式を設定する [古い関数]
PDF_set_border_style -- 注記の周りの境界の形式を設定する [古い関数]
PDF_set_char_spacing -- 文字間隔を設定する [古い関数]
PDF_set_duration -- ページ間隔を設定する [古い関数]
PDF_set_gstate -- 画像状態オブジェクトをアクティブにする
PDF_set_horiz_scaling -- テキストの横方向倍率を設定する [古い関数]
PDF_set_info_author -- ドキュメントの author フィールドを設定する [古い関数]
PDF_set_info_creator -- ドキュメントの creator フィールドを設定する [古い関数]
PDF_set_info_keywords -- ドキュメントの keyword フィールドを設定する [古い関数]
PDF_set_info_subject -- ドキュメントの subject フィールドを設定する [古い関数]
PDF_set_info_title -- ドキュメントの title フィールドを設定する [古い関数]
PDF_set_info -- ドキュメント情報のフィールドを設定する
PDF_set_layer_dependency -- レイヤー間の関係を定義する
PDF_set_leading -- テキストの行間を設定する [古い関数]
PDF_set_parameter -- 文字列パラメータを設定する
PDF_set_text_matrix -- テキストの行列を設定する [古い関数]
PDF_set_text_pos -- テキストの位置を設定する
PDF_set_text_rendering -- テキストの描画方法を設定する [古い関数]
PDF_set_text_rise -- テキストの傾きを設定する [古い関数]
PDF_set_value -- 数値パラメータを設定する
PDF_set_word_spacing -- 単語間の空白を設定する [古い関数]
PDF_setcolor -- 塗りつぶし色および輪郭色を設定する
PDF_setdash -- 破線パターンを設定する
PDF_setdashpattern -- 破線パターンを設定する
PDF_setflat -- 平面度を設定する
PDF_setfont -- フォントを設定する
PDF_setgray_fill -- 塗りつぶし色をグレーに設定する [古い関数]
PDF_setgray_stroke -- 描画色をグレーに設定する [古い関数]
PDF_setgray -- 色をグレーに設定する [古い関数]
PDF_setlinecap -- linecap パラメータを設定する
PDF_setlinejoin -- linejoin パラメータを設定する
PDF_setlinewidth -- 線幅を設定する
PDF_setmatrix -- 現在の変換行列を設定する
PDF_setmiterlimit -- miter limit を設定する
PDF_setpolydash -- 複雑な破線パターンを設定する [古い関数]
PDF_setrgbcolor_fill -- 塗りつぶし RGB 色の値を設定する
PDF_setrgbcolor_stroke -- 描画 RGB 色を設定する [古い関数]
PDF_setrgbcolor -- 描画および塗りつぶし RGB 色を設定する [古い関数]
PDF_shading_pattern -- シェーディングパターンを定義する
PDF_shading -- 混色を定義する
PDF_shfill -- シェーディングで領域を塗りつぶす
PDF_show_boxed -- ボックスにテキストを出力する [古い関数]
PDF_show_xy -- 指定した位置にテキストを出力する
PDF_show -- 現在の位置にテキストを出力する
PDF_skew -- 座標系を歪ませる
PDF_stringwidth -- テキストの幅を返す
PDF_stroke -- パスを描く
PDF_suspend_page -- ページを停止する
PDF_translate -- 座標系の原点を設定する
PDF_utf16_to_utf8 -- 文字列を UTF-16 から UTF-8 に変換する
PDF_utf32_to_utf16 -- 文字列を UTF-32 から UTF-16 に変換する
PDF_utf8_to_utf16 -- 文字列を UTF-8 から UTF-16 に変換する