PHP: ClibPDF 関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<method_existscpdf_add_annotation>
view the version of this page
Last updated: Sat, 17 Jul 2004

X. ClibPDF 関数

導入

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

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

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

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

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

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

要件

ClibPDF関数を使用するには、ClibPDFパッケージをインストールする必 要があります。ClibPDFは、からダウンロード可能ですが、商用で使用する場合には ライセンスを購入する必要があります。 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);
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, 750);
cpdf_end_text($cpdf);
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);
  
  /* minute strokes */
  cpdf_setlinewidth($pdf, 2.0);
  for ($alpha = 0; $alpha &lt; 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 &lt; 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 パラメータを設定するparameter
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 -- 座標系の原点を設定する


add a note add a note User Contributed Notes
ClibPDF 関数
puterasalji at yahoo dot com
07-Apr-2003 03:32
I've finally found a way to display text

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

$pdf = cpdf_open(0);

 
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);

 
cpdf_translate($pdf, $radius + $margin, $radius + $margin);

 
cpdf_begin_text($pdf);
 
cpdf_set_font($pdf, "Arial", 30, "NULL");
 
cpdf_set_text_rendering($pdf, 1);
 
cpdf_text($pdf, "Yahoo!!", -198, 50);
 
cpdf_end_text($pdf);

 
/* minute strokes*/
 
for ($alpha = 0; $alpha < 90; $alpha += 6)
   {
      
cpdf_setrgbcolor($pdf,9.0,9.0,0.0);
  
cpdf_rotate($pdf, 6.0);
  
cpdf_moveto($pdf, $radius, 0.0);
  
cpdf_lineto($pdf, $radius-$margin/3, 0.0);
  
cpdf_stroke($pdf);

   }

cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>

I'm not sure why, but the text appeared only after I've pasted the minute strokes draw function from clock.php example. I user the cpdf_translate to begin the x,y coordinate in the middle of the document

<method_existscpdf_add_annotation>
 Last updated: Sat, 17 Jul 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Sun Nov 14 23:09:54 2004 Local time zone must be set--see zic manual page