Forum und email

ClibPDF 関数 [非推奨]

導入

警告

ClibPDF のサポートは廃止予定です。代替候補としては、 HaruPDFlib などがあります。または PHP での実装 のいずれかを使用するという方法もあります。

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 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

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)

Example#1 簡単な ClibPDF の例

<?php
$cpdf 
cpdf_open(0);
cpdf_page_init($cpdf105958421.0);
cpdf_add_outline($cpdf0001"Page 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf"Times-Roman"30"WinAnsiEncoding");
cpdf_set_text_rendering($cpdf1);
cpdf_text($cpdf"Times Roman outlined"5050);
cpdf_end_text($cpdf);
cpdf_moveto($cpdf5050);
cpdf_lineto($cpdf740330);
cpdf_stroke($cpdf);
cpdf_finalize_page($cpdf1);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>

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

Example#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+10* ($radius $margin), * ($radius $margin), 1.0);
  
  
cpdf_set_page_animation($pdf40.5000);  /* wipe */
  
  
cpdf_translate($pdf$radius $margin$radius $margin);
  
cpdf_save($pdf);
  
cpdf_setrgbcolor($pdf0.00.01.0);
  
  
/* minute strokes */
  
cpdf_setlinewidth($pdf2.0);
  for (
$alpha 0$alpha 360$alpha += 6) {
    
cpdf_rotate($pdf6.0);
    
cpdf_moveto($pdf$radius0.0);
    
cpdf_lineto($pdf$radius-$margin/30.0);
    
cpdf_stroke($pdf);
  }
  
  
cpdf_restore($pdf);
  
cpdf_save($pdf);
 
  
/* 5 minute strokes */
  
cpdf_setlinewidth($pdf3.0);
  for (
$alpha 0$alpha 360$alpha += 30) {
    
cpdf_rotate($pdf30.0);
    
cpdf_moveto($pdf$radius0.0);
    
cpdf_lineto($pdf$radius-$margin0.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/20.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.80.0);
  
cpdf_lineto($pdf, -$radius/10$radius/20);
  
cpdf_closepath($pdf);
  
cpdf_fill($pdf);
  
cpdf_restore($pdf);

  
/* draw second hand */
  
cpdf_setrgbcolor($pdf1.00.00.0);
  
cpdf_setlinewidth($pdf2);
  
cpdf_save($pdf);
  
cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
  
cpdf_moveto($pdf, -$radius/50.0);
  
cpdf_lineto($pdf$radius0.0);
  
cpdf_stroke($pdf);
  
cpdf_restore($pdf);

  
/* draw little circle at center */
  
cpdf_circle($pdf00$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 拡張モジュールの ドキュメントも参照ください。

目次