XIV. ClibPDF 関数

導入

ClibPDF により、PDF ドキュメントを PHP により作成可能となります。 ClibPDF の機能と API は、 PDFlib に 似ています。この文書とともに、よりライブラリの詳細を説明している ClibPDF のマニュアルも読んでください。

元の ClibPDF および PHP モジュールの多くの関数名は、 PDFlib と同様に同じです。 cpdf_open() 以外の全ての関数は、最初の パラメータとしてドキュメントのハンドルをとります。

現在、このハンドルは内部で使用されていません。これは、 ClibPDF が複数の PDF ドキュメントを同時に作成する機能をサポートして いないためです。実際、これを試みても、結果は期待できません。 マルチスレッド環境での結果を予測することはできません。ClibPDF の 作者によれば、これは将来のリリースで変更されます (これを書いている時点での最新版は 1.10 です)。 もしこの機能が必要なら、pdflib モジュールを使用してください。

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

その他の ClibPDF の機能で優れているのは、新規のページのオープン後で あっても任意のページをいつでも修正可能であるという点です。関数 cpdf_set_current_page() により、カレントの ページを離れて、他のページを修正できるようになります。

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

注意: この拡張モジュールは PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 5.1.0.

注意: 外部の PDF ライブラリを使用しない別のフリーな PDF 作成ツールに ついては、 関連する FAQ を参照ください。

要件

ClibPDF 関数を使用するには、ClibPDF パッケージをインストールする 必要があります。ClibPDF は、 FastIO からダウンロード可能ですが、商用で使用する場合には ライセンスを購入する必要があります。 PHP では、cpdflib >= 2 を使用する必要があります。

インストール手順

この関数が動作するには、 --with-cpdflib[=DIR] を指定して PHP をコンパイルする必要があります。DIR は cpdflib をインストールする ディレクトリで、 /usr がデフォルトです。 ClibPDF が使用する jpeg ライブラリと tiff ライブラリの場所を指定することも できます。これを行うには、configure にオプション --with-jpeg-dir[=DIR] および --with-tiff-dir[=DIR] を 指定してください。

実行時設定

設定ディレクティブは定義されていません。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

CPDF_PM_NONE ( integer )

CPDF_PM_OUTLINES ( integer )

CPDF_PM_THUMBS ( integer )

CPDF_PM_FULLSCREEN ( integer )

CPDF_PL_SINGLE ( integer )

CPDF_PL_1COLUMN ( integer )

CPDF_PL_2LCOLUMN ( integer )

CPDF_PL_2RCOLUMN ( integer )

例 1. 簡単な ClibPDF の例

<?php
$cpdf
= cpdf_open ( 0 );
cpdf_page_init ( $cpdf , 1 , 0 , 595 , 842 , 1.0 );
cpdf_add_outline ( $cpdf , 0 , 0 , 0 , 1 , "Page 1" );
cpdf_begin_text ( $cpdf );
cpdf_set_font ( $cpdf , "Times-Roman" , 30 , "WinAnsiEncoding" );
cpdf_set_text_rendering ( $cpdf , 1 );
cpdf_text ( $cpdf , "Times Roman outlined" , 50 , 50 );
cpdf_end_text ( $cpdf );
cpdf_moveto ( $cpdf , 50 , 50 );
cpdf_lineto ( $cpdf , 740 , 330 );
cpdf_stroke ( $cpdf );
cpdf_finalize_page ( $cpdf , 1 );
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.php" );
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 );
  
  
/* minute strokes */
  
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 minute strokes */
  
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 ();

  
/* draw hour hand */
  
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 );

  
/* draw minute hand */
  
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 );

  
/* draw second hand */
  
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 );

  
/* draw little circle at center */
  
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 );
?>

参考

PDFlib 拡張モジュールの ドキュメントも参照ください。

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