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 を使用する必要があります。
ClibPDF ライブラリの開発は終了しており、FastIO
のウェブサイトもそのうちにアクセスできなくなることでしょう。
この関数が動作するには、 --with-cpdflib[=DIR] を指定して PHP
をコンパイルする必要があります。DIR は cpdflib をインストールする
ディレクトリで、/usr がデフォルトです。
ClibPDF が使用する jpeg ライブラリと tiff ライブラリの場所を指定することも
できます。これを行うには、configure にオプション --with-jpeg-dir[=DIR] および --with-tiff-dir[=DIR] を 指定してください。
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、
実行時に動的にロードされている場合のみ使用可能です。
例 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 拡張モジュールの
ドキュメントも参照ください。
|
|