VII. ClibPDF 関数

ClibPDF により、PDF ドキュメントを PHP により作成可能となります。 これは、FastIO にありますが、 フリーソフトウエアではありません。 ClibPDF を使用する前にライセンス規約を詳しく読む必要があります。 ライセンス規約を満たせない場合は、同じく非常に強力なライブラリである Thomas Merz が作成した pdflib を使用することを考えてみてください。 ClibPDF の機能と API は、Thomas Merz の pdflib に似ていますが、 FastIO によれば、ClibPDF はより高速でより小さなドキュメントを 生成します。 この優劣は、新しいバージョン 2.0 の pdflib と比べた場合、 変わる可能性があります。 簡単なベンチ―マーク (pdflib 2.0 の例 pdfclock.c を php スクリプトに 変換したもの)では、速度に違いは全くありません。ファイルサイズも 圧縮をオフにした場合、同程度です。よって、両者を試してどちらが自分の業務 に適しているかを判断してください。

ClipPDF のマニュアルにはライブラリのより詳細な事項が記述されているため、 このドキュメントは ClipPDF のマニュアルを参照しつつ読む必要があります。

pdflib と同様に、多くの関数は ClipPDF と PHP モジュールとで 同じ名前となっています。 cpdf_open を除く全ての関数は、 最初の引数としてドキュメントのハンドルを取ります。 現在のところ、ClipPDF は複数のPDFドキュメントの同時作成をサポートして いないため、このハンドルは内部的に使用されていません。 実際、同時作成時の結果は予想できず、試みるべきではありません。 マルチスレッド環境で、その結果を予想することはできません。 ClipPDF の作者によれば、 将来のリリースではこの点は変更されるとのことです。 (このドキュメントを書いている現在でのバージョンは 1.10 です) この機能を必要な場合は、pdflib モジュールを使用してください。

注意: 関数 cpdf_set_font は、PHP3 でアジア用フォント をサポートするために変更されました。 パラメータ encoding は、整数ではなく文字列になりました。

ClipPDF が pdflib に対して大きく優れているのは、 テンポラリファイルを使用せずに pdf ドキュメントを 完全にメモリー上で作成することが可能であることです。 あらかじめ定義された単位長さの座標を渡す機能も有しています。 この機能は便利ですが、 pdf_translate で模擬することが可能です。

多くの機能の使用法は非常に容易です。 最も困難なのは、おそらく全く新規に PDF ドキュメントを作成する場合でしょう。 次の例は、導入の手助けとなるはずです。 この例では、ページを1つ有するドキュメントを作成します。 このページは、30pt のアウトラインフォントでテキスト "Times-Roman" により書かれます。テキストには下線が引かれます。

例 1. 簡単な ClibPDF の例


<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_moveto($cpdf, 50, 740);
cpdf_lineto($cpdf, 330, 740);
cpdf_stroke($cpdf);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
    

pdflib の配布ファイルには、アナログクロックを有する 複数ページを作成するより複雑な例が含まれています。 以下に ClipPDF 拡張を使用してこの例を PHP に変換したものを 示します。

例 2. pdflib 2.0 配布ファイルからの pdfclock の例


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

$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php3");
cpdf_set_title($pdf, "Analog Clock");
  
while($pagecount-- > 0) {
  cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
  
  cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);  /* wipe */
  
  cpdf_translate($pdf, $radius + $margin, $radius + $margin);
  cpdf_save($pdf);
  cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
  
  /* 1分ずつ進む */
  cpdf_setlinewidth($pdf, 2.0);
  for ($alpha = 0; $alpha < 360; $alpha += 6)
    {
    cpdf_rotate($pdf, 6.0);
    cpdf_moveto($pdf, $radius, 0.0);
    cpdf_lineto($pdf, $radius-$margin/3, 0.0);
    cpdf_stroke($pdf);
    }
  
  cpdf_restore($pdf);
  cpdf_save($pdf);
 
  /* 5 分ずつ進む */
  cpdf_setlinewidth($pdf, 3.0);
  for ($alpha = 0; $alpha < 360; $alpha += 30)
  {
    cpdf_rotate($pdf, 30.0);
    cpdf_moveto($pdf, $radius, 0.0);
    cpdf_lineto($pdf, $radius-$margin, 0.0);
    cpdf_stroke($pdf);
  }

  $ltime = getdate();

  /* 時針を描く */
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
  cpdf_moveto($pdf, -$radius/10, -$radius/20);
  cpdf_lineto($pdf, $radius/2, 0.0);
  cpdf_lineto($pdf, -$radius/10, $radius/20);
  cpdf_closepath($pdf);
  cpdf_fill($pdf);
  cpdf_restore($pdf);

  /* 分針を描く */
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
  cpdf_moveto($pdf, -$radius/10, -$radius/20);
  cpdf_lineto($pdf, $radius * 0.8, 0.0);
  cpdf_lineto($pdf, -$radius/10, $radius/20);
  cpdf_closepath($pdf);
  cpdf_fill($pdf);
  cpdf_restore($pdf);

  /* 秒針を描く */
  cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
  cpdf_setlinewidth($pdf, 2);
  cpdf_save($pdf);
  cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
  cpdf_moveto($pdf, -$radius/5, 0.0);
  cpdf_lineto($pdf, $radius, 0.0);
  cpdf_stroke($pdf);
  cpdf_restore($pdf);

  /* 中心に小さな円を描く */
  cpdf_circle($pdf, 0, 0, $radius/30);
  cpdf_fill($pdf);

  cpdf_restore($pdf);

  cpdf_finalize_page($pdf, $pagecount+1);
}

cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
    
目次
cpdf_set_creator ? pdf ドキュメントの creator フィールドを設定する
cpdf_set_title ? pdf ドキュメントの title フィールドを設定する
cpdf_set_subject ? pdfドキュメントのsubject フィールドを設定する
cpdf_set_keywords ? pdfドキュメントのkeywords フィールドを設定する
cpdf_open ? 新規pdfドキュメントをオープンする
cpdf_close ? pdf ドキュメントを閉じる
cpdf_page_init ? 新規ページを開始する
cpdf_finalize_page ? ページを終了する
cpdf_finalize ? ドキュメントを終了する
cpdf_output_buffer ? pdf ドキュメントをメモリバッファに出力する
cpdf_save_to_file ? pdf ドキュメントをファイルに書きこむ
cpdf_set_current_page ? カレントページを設定する
cpdf_begin_text ? テキストセクションを開始する
cpdf_end_text ? テキストセクションを終了する
cpdf_show ? 現在位置にテキストを出力する
cpdf_show_xy ? 指定位置にテキストを出力する
cpdf_text ? テキストをパラメータを元に出力する
cpdf_set_font ? フォントの種類とサイズを選択する
cpdf_set_leading ? テキスト行の間隔を設定する
cpdf_set_text_rendering ? テキストのレンダリング法を定義する
cpdf_set_horiz_scaling ? テキストの水平方向の倍率を設定する
cpdf_set_text_rise ? テキストの高さを設定する
cpdf_set_text_matrix ? テキスト行列を設定する
cpdf_set_text_pos ? テキスト位置を設定する
cpdf_set_char_spacing ? 文字間隔を設定する
cpdf_set_word_spacing ? 単語間の間隔を設定する
cpdf_continue_text ? 次の行にテキストを出力する
cpdf_stringwidth ? カレントフォントのテキストの幅を返す
cpdf_save ? 現在の環境を保存する
cpdf_restore ? 以前に保存した環境を回復させる
cpdf_translate ? 座標系の原点を設定する
cpdf_scale ? 倍率を設定する
cpdf_rotate ? 回転を設定する
cpdf_setflat ? flatness を設定する
cpdf_setlinejoin ? linejoin パラメータを設定するparameter
cpdf_setlinecap ? linecap パラメータを設定する
cpdf_setmiterlimit ? miter のリミットを設定する
cpdf_setlinewidth ? 線幅を設定する
cpdf_setdash ? 破線のパターンを設定する
cpdf_moveto ? カレントのポイントを設定する
cpdf_rmoveto ? カレントのポイントを設定する
cpdf_curveto ? 曲線を描く
cpdf_lineto ? 線を描く
cpdf_rlineto ? 線を描く
cpdf_circle ? 円を描く
cpdf_arc ? 円弧を描く
cpdf_rect ? 矩形を描く
cpdf_closepath ? パスを閉じる
cpdf_stroke ? パスに沿って線を描く
cpdf_closepath_stroke ? パスを閉じ、線をパスに沿って描く
cpdf_fill ? カレントのパスを塗りつぶす
cpdf_fill_stroke ? カレントのパスを塗りつぶし、描く
cpdf_closepath_fill_stroke ? パスを閉じ、塗りつぶし、描く
cpdf_clip ? カレントのパスを切り取る
cpdf_setgray_fill ? 塗りつぶし色をグレー値に設定する
cpdf_setgray_stroke ? 描画色をグレー値に設定する
cpdf_setgray ? 描画、塗りつぶし色をグレー値に設定する
cpdf_setrgbcolor_fill ? 塗りつぶし色をRGBカラー値に設定する
cpdf_setrgbcolor_stroke ? 描画色をRGBカラー値に設定する
cpdf_setrgbcolor ? 描画色および塗りつぶし色をRGB値に設定する
cpdf_add_outline ? 現在のページにブックマークを追加する
cpdf_set_page_animation ? ページ間の移行時間を設定する
cpdf_import_jpeg ? JPEG 画像をオープンする
cpdf_place_inline_image ? 画像をページに置く
cpdf_add_annotation ? 注記を追加する