LXXVIIpdf 関数

導入

PHPのPDF関数は、Thomas Merzにより作成されたPDFlibライブラリを使用してPDFファイル を作成することが可能です。

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

PDFlibのほとんどの関数とPHPモジュール内の関数の名前とパラメータは 共通になっています。このモジュールを効率的に使用するには、PDFまた はPostScriptに関する基本的な考え方も理解しておく必要があります。 全ての長さと座標は、Postscriptのポイント数で計られます。通常、1イ ンチ当たり72 Postscript ポイントですが、これは、出力解像度に依存 します。使用する座表系に関するより詳細な説明については、PDFlibの ソース配布に含まれるPDFlibドキュメントを参照下さい。

ほとんど全てのPDF関数は、最初の引数パラメータとして pdf object を必要とすることに注意して下さ い。より詳細な情報については以下の例を参照下さい。

要件

PDFlibは、http://www.pdflib.com/pdflib/index.html でダウンロード 可能ですが、商用で使用する場合はライセンスを購入する必要がありま す。この拡張モジュールをコンパイルするには、JPEGおよびTIFF が必要です。

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

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

PDFlib 3.0以降が、PHP 3.0.19以降でサポートされています。

インストール手順

以下の関数が動作するようにするには、 --with-pdflib[=DIR]を指定してPHPを コンパイルする必要があります。DIRはPDFlibのベースインストールディレ クトリで、デフォルトは/usr/localです。 さらに、PDFlibでjpeg, tiff, pngライブラリを使用することを指定できま す。これは、PDFlib 4.xではオプションです。 これを行うには、configureにオプション --with-jpeg-dir[=DIR] --with-png-dir[=DIR] --with-tiff-dir[=DIR]を追加します。

バージョン3.xのPDFlibを使用する場合、PDFlibのconfigureのオプションに --enable-shared-pdflibを指定する必要があります。

実行用の設定

この拡張モジュールは設定ディレクティブを全く 定義しません。

古いバージョンのPDFlibとの混乱

PHP v4.0.5以降、PHPlib用のPHP拡張モジュールは、PDFlib GmbH から正 式にサポートされています。これにより、PDFlibマニュアル(バージョン 3.00以降)に記述された全ての関数がPHP4で全く同じ意味、同じパラメー タでサポートされています。返り値のみは、エラーの場合に FALSEを返すというPHPの流儀に合わせるために PDFlibマニュアルと異なっていることがあります。互換性を保つために PDFlibサポート関数ではまだ古い関数もサポートしていますが、上記の ように新しいバージョンに置換される予定です。PDFlib GmbH は、これら の古い関数を使用した場合に生じた際に生じた問題に関してはサポートを 行いません。

表 1古い関数と代替関数

古い関数代替関数
pdf_put_image()もう不要です。
pdf_execute_image()もう不要です。
pdf_get_annotation() 同じパラメータでpdf_get_bookmark()を使用。
pdf_get_font() pdf_get_value() に2番目のパラメータとして "font"を渡す。
pdf_get_fontsize() pdf_get_value() に2番目のパラメータとして "fontsize"を渡す。
pdf_get_fontname() pdf_get_parameter()に2番目のパラメータとして "fontname" を渡す。
pdf_set_info_creator() pdf_set_info()に2番目のパラメータとして "Creator"を渡す。
pdf_set_info_title() pdf_set_info()に2番目のパラメータとして "Title"を渡す。
pdf_set_info_subject() pdf_set_info()に2番目のパラメータとして "Subject"を渡す。
pdf_set_info_author() pdf_set_info()に2番目のパラメータとして "Author"を渡す。
pdf_set_info_keywords() pdf_set_info()に2番目のパラメータとして "Keywords"を渡す。
pdf_set_leading() pdf_set_value()に2番目のパラメータとして "leading"を渡す。
pdf_set_text_rendering() pdf_set_value()に2番目のパラメータとして "textrendering"を渡す。
pdf_set_text_rise() pdf_set_value()に2番目のパラメータとして "textrise"を渡す。
pdf_set_horiz_scaling() pdf_set_value()に2番目のパラメータとして "horizscaling"を渡す。
pdf_set_text_matrix()もう使用できません。
pdf_set_char_spacing() pdf_set_value()に2番目のパラメータとして "charspacing"を渡す。
pdf_set_word_spacing() pdf_set_value()に2番目のパラメータとして "wordspacing"を渡す。
pdf_set_transition() pdf_set_parameter()に2番目のパラメータとして "transition"を渡す。
pdf_open() pdf_new()の後に pdf_open_file()をコールする。
pdf_set_font() pdf_findfont()の後に pdf_setfont()をコールする。
pdf_set_duration() pdf_set_value()に2番目のパラメータとして "duration"を渡す。
pdf_open_gif() pdf_open_image_file()に2番目のパラメータとして "gif" を渡す。
pdf_open_jpeg() pdf_open_image_file()に2番目のパラメータとして "jpeg" を渡す。
pdf_open_tiff() pdf_open_image_file()に2番目のパラメータとして "tiff" を渡す。
pdf_open_png() pdf_open_image_file()に2番目のパラメータとして "png" を渡す。
pdf_get_image_width() pdf_get_value()に2番目のパラメータとして "imagewidth"、3番目のパラメータとして imageを渡す。
pdf_get_image_height() pdf_get_value()に2番目のパラメータとして "imageheight"、3番目のパラメータとして imageを渡す。

多くの関数の使用法は簡単です。最も困難なのは、非常に簡単なpdfドキュ メントを作成する場合でしょう。次の例は、入門の際の助けとなるはず です。この例では、1ページを有するファイル test.pdfが作成されます。このページには、30ポ イントのアウトラインフォントでテキスト"Times-Roman outlined"が描 かれます。このテキストには、下線も引かれます。

例 1PDFlibでPDFドキュメントを作成する

<?php
$pdf = pdf_new();
pdf_open_file($pdf, "test.pdf");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFlib 2.0");
pdf_set_info($pdf, "Creator", "See Author");
pdf_set_info($pdf, "Subject", "Testing");
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "Page 1");
pdf_set_font($pdf, "Times-Roman", 30, "host");
pdf_set_value($pdf, "textrendering", 1);
pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
echo "<A HREF=getpdf.php>完了しました</A>";
?>

以下のスクリプトgetpdf.phpは、PDFドキュメ ントを返すだけのものです。

<?php
$len = filesize($filename);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
readfile($filename);
?>

PDFlibの配布ファイルには、アナログクロックで本格的なページを作成す るより複雑な例が含まれています。ここでは、PDFlibのメモリ内作成機 能を使用しており、このため、テンポラリファイルは不要です。この例 をPHPからPDFlibを使用するように変換すると以下のようになります。 (CLibPDFモジュール)のドキュメント にも同じ例があります。)

例 2PDFlib配布ファイル中の pdfclockの例

<?php
$radius = 200;
$margin = 20;
$pagecount = 10;

$pdf = pdf_new();

if (!pdf_open_file($pdf, "")) {
    print error;
    exit;
};

pdf_set_parameter($pdf, "warning", "true");

pdf_set_info($pdf, "Creator", "pdf_clock.php");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Analog Clock");

while($pagecount-- > 0) {
    pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin));

    pdf_set_parameter($pdf, "transition", "wipe");
    pdf_set_value($pdf, "duration", 0.5);
  
    pdf_translate($pdf, $radius + $margin, $radius + $margin);
    pdf_save($pdf);
    pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);

    /* 1分刻みの目盛 */
    pdf_setlinewidth($pdf, 2.0);
    for ($alpha = 0; $alpha < 360; $alpha += 6) {
        pdf_rotate($pdf, 6.0);
        pdf_moveto($pdf, $radius, 0.0);
        pdf_lineto($pdf, $radius-$margin/3, 0.0);
        pdf_stroke($pdf);
    }

    pdf_restore($pdf);
    pdf_save($pdf);

    /* 5分刻みの目盛 */
    pdf_setlinewidth($pdf, 3.0);
    for ($alpha = 0; $alpha < 360; $alpha += 30) { 
        pdf_rotate($pdf, 30.0);
        pdf_moveto($pdf, $radius, 0.0);
        pdf_lineto($pdf, $radius-$margin, 0.0);
        pdf_stroke($pdf);
    }

    $ltime = getdate();

    /* 時針を描画 */
    pdf_save($pdf);
    pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0);
    pdf_moveto($pdf, -$radius/10, -$radius/20);
    pdf_lineto($pdf, $radius/2, 0.0);
    pdf_lineto($pdf, -$radius/10, $radius/20);
    pdf_closepath($pdf);
    pdf_fill($pdf);
    pdf_restore($pdf);

    /* 分針を描画 */
    pdf_save($pdf);
    pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0);
    pdf_moveto($pdf, -$radius/10, -$radius/20);
    pdf_lineto($pdf, $radius * 0.8, 0.0);
    pdf_lineto($pdf, -$radius/10, $radius/20);
    pdf_closepath($pdf);
    pdf_fill($pdf);
    pdf_restore($pdf);

    /* 秒針を描画 */
    pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
    pdf_setlinewidth($pdf, 2);
    pdf_save($pdf);
    pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
    pdf_moveto($pdf, -$radius/5, 0.0);
    pdf_lineto($pdf, $radius, 0.0);
    pdf_stroke($pdf);
    pdf_restore($pdf);

    /* 中心に小さな円を描画 */
    pdf_circle($pdf, 0, 0, $radius/30);
    pdf_fill($pdf);

    pdf_restore($pdf);

    pdf_end_page($pdf);

    /* 変化を見るために待つ */
    sleep(1);
}

pdf_close($pdf);

$buf = pdf_get_buffer($pdf);
$len = strlen($buf);

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

pdf_delete($pdf);
?>

以下も参照下さい:

注意 PDFドキュメントを作成するための別のPHPモジュールとして FastIO's ClibPDFが利用可能です。 詳細については、ClibPDFの節を参 照下さい。ClibPDF はPDFlibとはや や異なるAPIを使用していることに注意して下さい。

目次
pdf_add_annotation -- 古い関数: 注記を追加する
pdf_add_bookmark -- ブックマークをカレントのページに追加する
pdf_add_launchlink -- カレントのページに起動用注記を追加する
pdf_add_locallink -- カレントのページにリンク注記を追加
pdf_add_note -- カレントのページに注記を追加する
pdf_add_outline -- 古い関数: カレントのページにブックマークを追加する
pdf_add_pdflink -- カレントページにリンク注記を追加
pdf_add_thumbnail -- カレントのページにサムネールを追加する
pdf_add_weblink -- カレントのページにWebリンクを追加する
pdf_arc -- (反時計回りに)円弧を描く
pdf_arcn -- (時計回りに)円弧を描く
pdf_attach_file -- カレントのページに添付ファイルを追加する
pdf_begin_page -- 新規ページを開始する
pdf_begin_pattern -- 新規パターンを開始する
pdf_begin_template -- 新規テンプレートを開始する
pdf_circle -- 円を描く
pdf_clip -- カレントのパスに切り取る
pdf_close_image -- 画像を閉じる
pdf_close_pdi_page --  ページハンドルを閉じる
pdf_close_pdi --  PDFドキュメント入力(PDI)を閉じる
pdf_close -- pdf ドキュメントを閉じる
pdf_closepath_fill_stroke -- カレントのパスを閉じ、塗りつぶし、輪郭を描く
pdf_closepath_stroke -- パスを閉じ、パスに沿って線を描く
pdf_closepath -- パスを閉じる
pdf_concat -- 行列をCTMに追加
pdf_continue_text -- 次の行にテキストを出力する
pdf_curveto -- 曲線を描く
pdf_delete -- PDFオブジェクトを削除
pdf_end_page -- ページを終了する
pdf_end_pattern -- パターンを終了する
pdf_end_template -- テンプレートを終了する
pdf_endpath -- 古い関数: カレントのパスを終了する
pdf_fill_stroke -- カレントのパスを塗りつぶし、パスの輪郭を描く
pdf_fill -- カレントのパスを塗りつぶす
pdf_findfont --  後でpdf_setfont()で使用するフォントを準備する
pdf_get_buffer --  生成されたPDFデータを含むバッファを取得する
pdf_get_font -- 古い関数: フォント処理
pdf_get_fontname -- 古い関数: フォント処理
pdf_get_fontsize -- 古い関数: フォント処理
pdf_get_image_height -- 古い関数: イメージの高さを返す
pdf_get_image_width -- 古い関数: イメージの幅を返す
pdf_get_majorversion --  PDFlibのメジャーバージョン番号を返す
pdf_get_minorversion --  PDFlibのマイナーバージョン番号を返す
pdf_get_parameter -- パラメータを得る
pdf_get_pdi_parameter -- PDF文字列パラメータを得る
pdf_get_pdi_value -- 数値型のPDIパラメータを取得する
pdf_get_value -- 数値を得る
pdf_initgraphics -- 描画状態をリセットする
pdf_lineto -- 線を描く
pdf_makespotcolor -- スポット色を作成する
pdf_moveto -- 現在の位置を設定する
pdf_new -- 新規PDFオブジェクトを作成する
pdf_open_CCITT --  生の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_png --  古い関数: PNGイメージをオープンする
pdf_open_tiff -- 古い関数: TIFFイメージをオープンする
pdf_open -- 古い関数: 新規の pdfオブジェクトをオープンする
pdf_place_image -- イメージをページ上に置く
pdf_place_pdi_page -- ページにイメージを置く
pdf_rect -- 長方形を描く
pdf_restore -- 以前保存された環境を復元する
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_font -- 古い関数: フォントの形式とサイズを選択
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_leading -- 古い関数: テキストの行間を設定する
pdf_set_parameter -- パラメータを設定する
pdf_set_text_matrix -- Deprecated: Sets the 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_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_show_boxed -- ボックスにテキストを出力する
pdf_show_xy -- 指定した位置にテキストを出力する
pdf_show -- カレントの位置にテキストを出力する
pdf_skew -- 座標系を歪ませる
pdf_stringwidth -- カレントフォントを用いた際のテキスト幅を返す
pdf_stroke -- パスに沿って線を描く
pdf_translate -- 座標系の原点を設定する