$Id: howtoinstall.html,v 1.25 2009-01-15 07:33:41 cz Exp $
PDFlib の各環境におけるインストール方法をまとめました。読めば分かると思いますが、PDFlibのインストールは非常に簡単です。
まずは PDFlib のパッケージを入手しましょう。PDFlib は商用製品であり、正式利用するにはライセンスキーを 日本の販売代理店 のページからリンクされている PDFlib製品見積り から購入する必要がありますが、ライセンスキーを指定しなくても生成された全ページに「www.pdflib.com」というロゴが表示されることを除けば他に機能制限はなく、全ての機能を利用することができます。思う存分 PDFlib を試用することができます。
PDFlib ダウンロードページ へ行き、利用する環境(OS)用のパッケージをダウンロードします。PDFlib はシングルバイナリーのため、PDFlib, PDI, PPS は同一のファイルとなっています(設定するライセンスキーにより、使える機能(というか関数)が決まる)。ライセンスキーを指定していない場合には全機能が使用可能です。なお、PPS を利用する場合には同じページにある PDFlib ブロックプラグイン も入手しておきましょう。
ダウンロードしたアーカイブファイルを展開して作成されたディレクトリ内には、下記のようなディレクトリ/ファイルがあるかと思います。日本語マニュアルも別途ダウンロードできます。
/bind ... 各言語用の PDFlib のライブラリファイルがあります。
/c ... C 言語用のサンプルとライブラリ
/cpp ... C++ 用のサンプルとライブラリ
/data ... サンプル(businesscard 等)で使うデータが入っています
/java ... Java 用のサンプルとライブラリ
/perl ... Perl 用のサンプル
/php ... PHP 用のサンプルとライブラリ
/python ... 空です
/tcl ... 空です
/doc ... PDFlib のマニュアル(PDFlib-manual.pdf)などがあります。
/fonts ... 指定したフォントのグリフを表示する .ps ファイルがあります。特に使いません。
readme.txt ... PDFlib に関するごくごく簡単な説明
ダウンロードページ からパッケージを入手します。ダウンロードするファイルは以下の通りです(マイナーバージョンは現行執筆時点と変わっている可能性があります)。
ここでは PDFlib-6.0.0-Linux.tar.gz をダウンロードしました。次に、適当なディレクトリ(/tmp/work とします)にファイル置いて、以下のようにアーカイブを展開します。
% tar zxvf PDFlib-6.0.0-Linux.tar.gz
各言語別の PDFlib のインストール方法例です。あくまでも一例であり、言うまでもなく、この通りでないと使えないと言うわけではありません。
PDFlib のアーカイブファイルの doc ディレクトリに同梱されている PDFlib-in-PHP-HowTo.pdf ファイルの翻訳版 も参照してください。
PHP拡張モジュールをコピーし、php.iniに拡張モジュールエントリを追加します。なお使用する拡張モジュールは下記のように PHP のバージョンによって異なります。
libpdf_php.so ファイルをコピーする先は extension_dir です。extension_dir の場所は、phpinfo(); などによって表示できます。手元の環境は Debian Woody のため、extension_dirは「/usr/lib/php4/20010901/」でした。
# cp bind/php/php-43x/libpdf_php.so /usr/lib/php4/20010901/
そして、php.ini に下記行を追加して Apache を再起動してください。これでインストールは完了です。
extension = libpdf_php.so
--enable-versioningを止めるの巻 や --enable-versioning はトラブルの元か? にもある通り、PHP の configure 時に「--enable-versioning」を指定していると、外部モジュールの読み込み時に下記のようなエラーとなり、読み込めない場合があります(少なくとも PHP 4.3.9 では再現しました)。
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/lib/php/libpdf_php.so' - ld.so.1: /usr/local/apache/bin/httpd: fatal: relocation error: file /usr/local/lib/php/libpdf_php.so: symbol executor_globals: referenced symbol not found in Unknown on line 0
そのため、configure 時には「--disable-versioning」と「--without-pdflib」オプションを指定し、これらの機能を明示的に無効に設定した上で、コンパイルを実行するようにしてください。
FreeBSD で PDFlib5 を動かそうとした時など、一部の環境ではバイナリー版の PDFlib が動作しないことがあります(エラーの例は PHP でサンプルを実行するとエラーが出力されますを参照)。この場合、自前の環境で DSO 版の PDFlib をビルドすることで、非互換性のある環境でも正常に PDFlib を使うことができるようになります。
なお、使用している pear が古いなど、うまく行かない場合には DSO 版 PDFlib の自前ビルド - 手動編 を参照してください。
注意: PDFlib 同梱の PDFlib-in-PHP-HowTo にも記載されていますが、IBM AIX および Mac OSX 版の PHP では DSO の挙動が怪しいため、それらの OS では PDFlib を静的リンクすることが推奨されています。その場合の手順は PDFlib の静的リンク を参照してください。
前準備: あらかじめ phpize コマンドのある場所へパスを通しておく必要があります。今回の場合、/usr/local/bin とします。また、extension_dir ディレクトリ(phpinfo(); などで表示されますね)が存在していない場合、下記のように最後の最後にインストールがこけてしまいます。
Build process completed successfully Installing 'pdf.so' at ext_dir (/usr/local/php4/lib/php/extensions/no-debug-non-zts-20020429/pdf.so) failed to copy pdf.so to /usr/local/php4/lib/php/extensions/no-debug-non-zts-20020429/pdf.so
ディレクトリが存在していない場合、あらかじめディレクトリを作成しておきます。
# mkdir -p /usr/local/php4/lib/php/extensions/no-debug-non-zts-20020429/
下記コマンドを実行し、pdflib のビルドを開始します。「path to pdflib installation? [autodetect] : 」には、パッケージ名/bind/c の場所を指定します。例えば $HOME/tmp に PDFlib-5.0.3-FreeBSD を展開している場合には「$HOME/tmp/PDFlib-5.0.3-FreeBSD/bind/c」を指定することになります。
# /usr/local/php4/bin/pear install pdflib . . . Build process completed successfully Installing 'pdf.so' at ext_dir (/usr/local/php4/lib/php/extensions/no-debug-non-zts-20020429/pdf.so) install ok: pdflib 2.0.2
上記のように表示されると、モジュールのビルドおよびインストールは完了です。あとは php.ini に下記行を追加し、Apache を再起動してください。
extension_dir = "/usr/local/php4/lib/php/extensions/no-debug-non-zts-20020429/" extension=pdf.so
Apache 再起動後、phpinfo(); を実行して下記のような表示があることが確認できれば、インストールは正常に終了です。あとは bind/php などにある適当なサンプルを実行してみましょう。
PDF Support enabled PDFlib GmbH Version 5.0.3p1 PECL Version 2.0.2 Revision $Revision: 1.25 $
使用している pear コマンドが古い(Debian Woody や FreeBSD 4.7 等)等の理由により、pear コマンドによるビルドがうまく動作しない場合、pear コマンドが裏で自動的に行ってくれる動作を手動で実行することにより、うまくビルドできるかと思います。
まず、PECL の pdflib パッケージ から最新版の tarball をダウンロードします。現在(2006/03/07)の最新版は 2.0.5 です。※PDFlib のアーカイブファイルは /tmp に展開しているものと仮定しています。
次に下記手順によりビルドを行います。なお、phpize を実行するにはお使いの環境に autoconf, automake, m4 等が必要となりますので、phpize や configure, make がエラーとなった場合にはエラーメッセージに注意してください。phpize コマンドが正常終了すると、configure コマンドが生成されます。
$ tar zxvf pdflib-2.0.5.tgz $ cd pdflib-2.0.5 $ phpize $ ./configure --with-pdflib=/tmp/PDFlib-6.0.3-Linux/bind/c $ make
make が正常終了すると、modules ディレクトリに pdf.so という名前で pdflib のモジュールが生成されているはずですので、お使いの環境の extension_dir にコピーします(phpinfo()関数で表示されます。ここでは /usr/lib/php4/20020429/ とします)。
# cp modules/pdf.so /usr/lib/php4/20020429/
最後に、php.ini に下記行を追加して Apache を再起動します。
extension=pdf.so
phpinfo() を実行して下記のような表示があることが確認できれば、インストールは正常に終了です。あとは bind/php などにある適当なサンプルを実行してみましょう。
PDF Support enabled PDFlib GmbH Version 6.0.3 PECL Version 2.0.5 Revision $Revision: 1.25 $
PHP のソースコードの PECL パッケージを最新版の物に入れ替え、PHP の configure オプションで、--with-pdflib オプションに PDFlib のアーカイブファイルの bind/c ディレクトリを指定するだけで、後は通常の PHP のコンパイル方法と同じです。
php 4.1.2 など、あまりに古い環境の場合はバージョン間の非互換性のためにうまくビルドできないことがあるので、その場合には素直に PHP 4.3 以降(できれば 4.4 系?)にバージョンアップしましょう。
http://pecl.php.net/package/pdflib より、pdflib-2.0.4.tgz をダウンロード % tar zxvf pdflib-2.0.4.tgz % tar jxvf php-4.4.2.tar.bz2 % cd php-4.4.2 # ※拡張子が .c もしくは .h のファイル以外はコピーしないように注意してください。 % cp -a ../pdflib-2.0.4/*.[ch] ext/pdf/ % rm configure % ./buildconf --force % ./configure --with-pdflib=../PDFlib-6.0.2-Linux/bind/c [その他の PHP の configure オプション] % make
PDFlib のダウンロード から Ruby 用のパッケージを入手し、パッケージを展開します。
次に下記コマンドを実行して、Ruby モジュールをコピーする場所を調べます。なお、ruby の require 関数により PDFlib.so を読み込めさえすればよいため、require の引数に PDFlib.so へのフルパスを記載する、もしくはプログラムを実行するディレクトリに PDFlib.so ファイルを配置する等の方法を取る場合には、下記の手順は特に不要となります。
% ruby -e "puts $:" /usr/local/lib/site_ruby/1.8 /usr/local/lib/site_ruby/1.8/i386-linux /usr/local/lib/site_ruby /usr/lib/ruby/1.8 /usr/lib/ruby/1.8/i386-linux
上記で表示されたディレクトリの内、ここでは /usr/local/lib/site_ruby/1.8/i386-linux にコピーするものとします。
# cp PDFlib-6.0.3-Linux-Ruby/bind/ruby/PDFlib.so /usr/local/lib/site_ruby/1.8/i386-linux
これでインストールは完了です。bind/ruby/hello.rb 等、サンプルプログラムを実行して pdf ファイルが生成されることを確認してください。
まずは Perl 用のパッケージ(ここでは PDFlib-6.0.0-Linux-perl.tar.gz)を入手し、パッケージを展開します。
次に下記コマンドを実行して、Perl モジュールをコピーする場所を調べます。
% perl -e 'use Config; print $Config{sitearchexp};'
Debian 系など、上記を実行しても何も表示されない環境の場合、Config.pm ファイルを探して、sitearchexp の値を調べます。ここでは '/usr/local/lib/perl/5.6.1' となっていました。
最後に、使用している Perl のバージョンに対応する PDFlib のライブラリを上記で調べたディレクトリにコピーします。ここでは Perl 5.6.1 を使っているものとします。これでインストールは完了です。
# cp PDFlib-6.0.0-Linux-perl/bind/perl/perl56/pdflib_pl.so /usr/local/lib/perl/5.6.1/
インクルードファイルとライブラリファイルを適当なディレクトリへコピーするだけでインストール完了です。ここでは /usr/local/include/pdflib にヘッダを、/usr/local/lib/pdflib にライブラリをコピーします。
# mkdir -p /usr/local/include/pdflib # mkdir -p /usr/local/lib/pdflib # cp bind/c/include/pdflib.h /usr/local/include/pdflib # cp bind/c/lib/libpdf.a /usr/local/lib/pdflib
なお、PDFlibをリンクする場合は算術ライブラリも同時にリンクする必要があります。例えばサンプルの hello.c をコンパイルするには、下記のようなコマンドとなります。
% gcc -I/usr/local/include/pdflib -L/usr/local/lib/pdflib hello.c -o hello -lm -lpdf
C 言語とほぼ同じです。まずは C言語 の説明通り、pdflib.h と libpdf.a をインストールします。次に pdflib.hpp を pdflib.h と同じ場所へコピーします。
# cp bind/cpp/pdflib.hpp /usr/local/include/pdflib
なお、PDFlibをリンクする場合は算術ライブラリおよび pdflib.cpp モジュールも同時にリンクする必要があります。例えばサンプルの hello.cpp をコンパイルするには、下記のようなコマンドとなります。
% g++ -I/usr/local/include/pdflib -L/usr/local/lib/pdflib pdflib.cpp -c -o pdflib.o % g++ -I/usr/local/include/pdflib -L/usr/local/lib/pdflib hello.cpp pdflib.o -o hello -lm -lpdf
インストールは非常に簡単で、pdflib.jar ファイルを CLASSPATH に追加するだけです。ここでは、.jar ファイルを /usr/local/pdflib/ に格納することにします。
# cp bind/java/pdflib.jar /usr/local/pdflib/ # cp bind/java/libpdf_java.so /usr/local/pdflib/
PDFlib のコンパイル時には CLASSPATH に pdflib.jar が必要です。例えばサンプルの hello.java をコンパイル・実行するには、下記のようなコマンドとなります。 java および javac コマンドは /usr/local/jdk/bin/ にあるものとします。
% PROG=hello % ENCODING=EUC-JP % PDFLIB_DIR=/usr/local/pdflib/ % JARDIR=$PDFLIB_DIR/pdflib.jar % CLASSPATH=$CLASSPATH:$JAR:. /usr/local/jdk/bin/javac -encoding $ENCODING $PROG.java % /usr/local/jdk/bin/java -Djava.library.path=$PDFLIB_DIR -cp $JAR:. $PROG
| 2006/03/07 | Ruby 版のインストール方法 を追加 |
| 2006/03/07 | DSO 版 PDFlib の自前ビルド - 手動編 を追加 |
| 2006/01/18 | PDFlib の静的リンク を追加 |
| 2004/08/18 | DSO 版 PDFlib の自前ビルド を追加 |
| 2004/06/25 | 執筆開始 |