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

# CXII. PDF 関数

# 導入

PHP の PDF 関数は、Thomas Merz により作成された PDFlib ライブラリを使用して PDF ファイルを作成することが可能です。

本節のドキュメントは、PDFlib ライブラリで利用可能な関数の概要のみを 説明することを意図しており、完全なリファレンスではありません。 ここで扱う各関数の完全で詳細な説明については、PDFlib GmbH が配布する すべての PDFlib パッケージに含まれている PDFlib リファレンスマニュアルを 参照ください。このドキュメントは、PDFlib の機能に関する 概要を非常に良くまとめており、全ての関数に関する最新のドキュメントが 含まれています。

PDFlib のほとんどの関数と PHP モジュール内の関数の名前とパラメータは 共通になっています。このモジュールを効率的に使用するには、PDF および PostScript に関する基本的な考え方も理解しておく必要があります。 全ての長さと座標は、Postscript のポイント数で計られます。通常、1 インチあたり 72 Postscript ポイントですが、これは出力解像度に依存します。 使用する座表系に関するより詳細な説明については、PDFlib の 配布物に含まれる PDFlib リファレンスマニュアルを参照ください。

PDFlib のバージョン 6 では、PHP 4 用の関数指向の API に加えて PHP 5 用のオブジェクト指向の API も提供しています。主な違いは 以下のとおりです。 PHP 4 では、まず最初に $p = PDF_new();() のような関数コールで PDF リソースを取得し、その後の関数コールで それを最初のパラメータとして使用する必要があります。たとえば PDF_begin_document($p, "", "")() のようになります。 PHP 5 では、PDFlib オブジェクトは $p = new PDFlib()() で作成されます。 このオブジェクトは、PDFlib API のすべての関数をメソッドとして 提供しています。たとえば $p->begin_document("", "")() のようになります。 さらに、PHP 5 の新機能である例外についても PDFlib 6 以降でサポートしています。

詳細な情報は、以下の例を参照ください。

> 注意: 外部 PDF ライブラリを使用しない、他のフリーな PDF ジェネレータに 関心がある場合には、 関連する FAQ を参照してください。

> 注意: この拡張モジュールは、PHP 4.3.9 以降 PECL に移動しました。

# 要件

PDFlib は http://www.pdflib.com/products/pdflib/index.html でダウンロード 可能ですが、商用で使用する場合はライセンスを購入する必要があります。

# 古いバージョンの PDFlib に関する問題

2000 年 3 月 9 日以降のバージョンの PHP 4 では、3.0 より古いバージョンの PDFlib をサポートしていません。

PDFlib 4.0 以降は、PHP 4.3 以降でサポートされています。

# インストール手順

この PECL 拡張 モジュールは PHP にバンドルされていません。 新規リリース・ダウンロード・ソースファイル・管理者情報・ CHANGELOG といった関連する情報については、次の場所にあります。 http://pecl.php.net/package/pdflib.

PHP < 4.3.9 で以下の関数が動作するようにするには、 --with-pdflib[=DIR] を指定して PHP を コンパイルする必要があります。DIR は PDFlib のベースインストール ディレクトリで、デフォルトは `/usr/local` です。

PHP 4.3.9 以降、この拡張モジュールは以下のコマンドで PEAR からインストールする必要があります。 pear install pdflib

# リソース型

リソース型は定義されていません。

# 廃止された PDFlib 関数についての注意

PHP 4.0.5 以降、PHPlib 用の PHP 拡張モジュールは、PDFlib GmbH から 正式にサポートされています。これにより、PDFlib リファレンスマニュアル (バージョン 3.0 以降) に記述された全ての関数が PHP4 で全く同じ意味、 同じパラメータでサポートされています。しかし、PDFlib V5.0.4 以降では すべてのパラメータを指定する必要があります。互換性を保つために PDFlib サポート関数ではまだ古い関数もサポートしていますが、上記の ように新しいバージョンに置換される予定です。PDFlib GmbH は、これらの 古い関数を使用した場合に生じた際に生じた問題に関してはサポートを 行いません。このドキュメントではそれらの関数については「古い関数」と 明記しており、かわりに使用する関数について説明しています。

# 例

多くの関数の使用法は簡単です。最も困難なのは、最初に pdf ドキュメントを作成する場合でしょう。次の例は、入門の際の 助けとなるはずです。この例は PHP 4 を対象に開発されており、 1 ページを有するファイル `test.pdf` が作成されます。 ドキュメントにはフィールドの内容についての情報が定義されており、 Helvetica-Bold フォントを読み込んで "Hello world! (says PHP)" というテキストを出力します。

例 1. PHP 4 用の PDFlib での Hello World の例

`<?php
$p = PDF_new();
/* 新しい PDF ファイルをオープンし、ディスク上に PDF を作成するためにファイル名を挿入します */
if (PDF_begin_document($p, "", "") == 0) {
die("Error: " . PDF_get_errmsg($p));
}
PDF_set_info($p, "Creator", "hello.php");
PDF_set_info($p, "Author", "Rainer Schaaf");
PDF_set_info($p, "Title", "Hello world (PHP)!");
PDF_begin_page_ext($p, 595, 842, "");
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "Hello world!");
PDF_continue_text($p, "(says PHP)");
PDF_end_page_ext($p, "");
PDF_end_document($p, "");
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;
PDF_delete($p);
?>`

以下の例は PHP 5 用の PDFlib 配布物で使用するためのものです。PHP 5 の 新機能である例外処理やオブジェクトのカプセル化機能を使用しています。 この例では `hello.pdf` という名前の 1 ページの ファイルを作成します。 ドキュメントにはフィールドの内容についての情報が定義されており、 Helvetica-Bold フォントを読み込んで "Hello world! (says PHP)" というテキストを出力します。

例 2. PHP 5 用の PDFlib での Hello World の例

    <?php

    try {
        $p = new PDFlib();

        /*  新しい PDF ファイルをオープンし、ディスク上に PDF を作成するためにファイル名を挿入します */
        if ($p->begin_document("", "") == 0) {
            die("Error: " . $p->get_errmsg());
        }

        $p->set_info("Creator", "hello.php");
        $p->set_info("Author", "Rainer Schaaf");
        $p->set_info("Title", "Hello world (PHP)!");

        $p->begin_page_ext(595, 842, "");

        $font = $p->load_font("Helvetica-Bold", "winansi", "");

        $p->setfont($font, 24.0);
        $p->set_text_pos(50, 700);
        $p->show("Hello world!");
        $p->continue_text("(says PHP)");
        $p->end_page_ext("");

        $p->end_document("");

        $buf = $p->get_buffer();
        $len = strlen($buf);

        header("Content-type: application/pdf");
        header("Content-Length: $len");
        header("Content-Disposition: inline; filename=hello.pdf");
        print $buf;
    }
    catch (PDFlibException $e) {
        die("PDFlib exception occurred in hello sample:\n" .
        "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
        $e->get_errmsg() . "\n");
    }
    catch (Exception $e) {
        die($e);
    }
    $p = 0;
    ?>

前のページ | ホーム | 次のページ
preg_split | 上に戻る | pdf_activate_item