LVIIIpdf 関数

導入

Thomas Merzによるpdfライブラリをインストールしている場合、PHPで pdfファイルを作成するために pdf 関数を使用することができます。 (http://www.pdflib.com/pdflib/index.html で取得可能です。)コンパ イルにはJPEGライブラリおよび TIFFライブラリも必要です。 これら2つのライブラリは、PHP の configure を実行する際にもしばしば 問題を発生します。問題を修正するには、configureのメッセージに従っ て下さい。

pdflibのソース配布ファイルと共に配布されているpdflibに関する素晴 らしいドキュメントを参照して下さい。この文書は、pdflib の機能に関 する概要を良くまとめています。pdflibのほとんどの関数とPHPモジュー ル内の関数の名前は共通になっています。パラメータも同じです。 このモジュールを効率的に使用するには、pdfまたはPostscriptの おおよその考え方も理解しておく必要があります。全ての長さと座標は Postscriptのポイント数で計られます。通常、1インチ当たり 72 Postscript ポイントですが、これは、出力解像度に依存します。

FastIOが作成した Clibpdfを使用したpdfドキュメント作成用の別のPHPモジュールがあります。 このライブラリのAPIは、やや異なっています。詳細は、 Clibpdf 関数の節をご覧下さい。

pdfモジュールは、pdf object という変数の型 を新規に導入します。ほとんど全ての関数は、最初の引数パラメータと して pdf object を必要とします。

古いバージョンの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を渡す。
()()

PDFlib 3.xのインストールに関するヒント

PDFlibのバージョン3.0以降では、オプション --enable-shared-pdflibを付けてPDFlibの configureを行う必要があります。

PDFlibの過去のバージョンに関する問題

2000/3/9以降のバージョンのPHP 4は、3.0より前のバージョンのPDFlib はサポートしていません。

一方、PHP 3 では 2.01 より新しいバージョンを使用するべきではあり ません。ただし、php3/functions/pdf.c (PHP 3.0.19) のリビジョン 1.61 以降では、PDFlib 3.0 以降を使用可能です。

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

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


<?php
<?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_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 — pdf ドキュメントを閉じる
pdf_closepath — パスを閉じる
pdf_closepath_fill_stroke — カレントのパスを閉じ、塗りつぶし、輪郭を描く
pdf_closepath_stroke — パスを閉じ、パスに沿って線を描く
pdf_close_image — 画像を閉じる
PDF_close_pdi — PDFドキュメント入力(PDI)を閉じる
PDF_close_pdi_page — ページハンドルを閉じる
PDF_concat — 行列をCTMに追加
pdf_continue_text — 次の行にテキストを出力する
pdf_curveto — 曲線を描く
PDF_delete — PDFオブジェクトを削除
pdf_end_page — ページを終了する
pdf_endpath — 古い関数: カレントのパスを終了する
PDF_end_pattern — パターンを終了する
PDF_end_template — テンプレートを終了する
pdf_fill — カレントのパスを塗りつぶす
pdf_fill_stroke — カレントのパスを塗りつぶし、パスの輪郭を描く
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_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 — 古い関数: 新規の pdfオブジェクトをオープンする
PDF_open_CCITT — 生のCCITTデータから新規イメージファイルをオープンする
PDF_open_file — 新規PDFオブジェクトをオープンする
pdf_open_gif — 古い関数: GIFイメージをオープンする
PDF_open_image — イメージ読み込み関数
pdf_open_image_file — ファイルからイメージを読み込む
PDF_open_jpeg — 古い関数: JPEGイメージをオープンする
PDF_open_pdi — PDFファイルをオープンする
PDF_open_pdi_page — ページを準備する
PDF_open_png — 古い関数: PNGイメージをオープンする
PDF_open_tiff — 古い関数: TIFFイメージをオープンする
pdf_place_image — イメージをページ上に置く
PDF_place_pdi_page — ページにイメージを置く
pdf_rect — 長方形を描く
pdf_restore — 以前保存された環境を復元する
pdf_rotate — 回転を設定する
pdf_save — 現在の環境を保存する
pdf_scale — スケールを設定する
PDF_setcolor — 塗りつぶし色および輪郭色をCMYKで設定する
pdf_setdash — 破線パターンを設定する
pdf_setflat — 平面度を設定する
PDF_setfont — カレントのフォントを設定する
pdf_setgray — 描画および塗りつぶし色をグレー値に設定する
pdf_setgray_fill — 塗りつぶし色をグレー値に設定する
pdf_setgray_stroke — 描画色をグレー値に設定する
pdf_setlinecap — linecap パラメータを設定する
PDF_setlinejoin — linejoinパラメータを設定する
PDF_setlinewidth — 線幅を設定する
PDF_setmiterlimit — miter limitを設定する
PDF_setpolydash — 複雑な破線パターンを設定
PDF_setrgbcolor — 描画色および塗りつぶし色をRGBカラー値で設定する
PDF_setrgbcolor_fill — 塗りつぶし色をRGBカラー値に設定する
PDF_setrgbcolor_stroke — 描画色をRGBカラー値に設定する
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 — ドキュメント情報のフィールドを設定する
PDF_set_leading — 古い関数: テキストの行間を設定する
PDF_set_parameter — パラメータを設定する
PDF_set_text_pos — テキストの位置を設定する
PDF_set_text_rendering — 古い関数: テキストの描画方法を設定
pdf_set_text_rise — 古い関数: テキストの傾きを設定する
pdf_set_text_matrix — 古い関数: テキストのマトリックスを設定
PDF_set_value — 数値を設定する
pdf_set_word_spacing — 古い関数: 単語間の空白を設定する
PDF_show — カレントの位置にテキストを出力する
PDF_show_boxed — ボックスにテキストを出力する
PDF_show_xy — 指定した位置にテキストを出力する
PDF_skew — 座標系を歪ませる
PDF_stringwidth — カレントフォントを用いた際のテキスト幅を返す
PDF_stroke — パスに沿って線を描く
PDF_translate — 座標系の原点を設定する
PDF_open_memory_image — PHPのイメージ関数で作成されたイメージをオープンする