PHP マニュアル
前のページ |  | 次のページ

# 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は、 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);
    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拡張モジュールのドキュメント も参照して下さい。

前のページ | ホーム | 次のページ
method_exists | 上に戻る | cpdf_add_annotation