libHaruを使ったPDFの生成

記事タイトルとURLをコピーする

PHPでPDFファイルを生成する場合、PDFlibFPDFを利用するというケースが多いと思います。

どちらもフォントの設定を行うことで日本語が扱えますし、情報も豊富なのですが、つい先日、日本人の方が開発されたlibHaruというPDF生成ライブラリを発見しました。日本国内での知名度はあまり高くないようですが、なかなか高機能でしたので、これをPHPから使ったらどんな感じになるのかMac OS X上で試してみました。

libHaruとは?

libHaruは、2005年度下期未踏ソフトウェア創造事業で採択されたフリーでクロスプラットフォームなPDF生成ライブラリです。ANSI Cで書かれているため多くの環境で利用でき、C言語の他に

  • Ruby
  • Delphi/Free Pascal
  • C#
  • PHP
  • Perl
  • FreeBasic

といった言語向けのバインディングも用意されています。

機能

libHaruのサイトで挙げられている機能は以下の通りです。

  • 線、文字、画像を含むPDFファイルの生成
  • アウトライン、テキスト注釈、リンク注釈
  • ドキュメントの圧縮
  • PNGおよびJPEG画像の埋め込み
  • Type1フォントおよびTrueTypeフォントの埋め込み
  • 暗号化PDFファイルの生成
  • 多くの文字集合の利用 (ISO8859-1〜16, MSCP1250〜8, KOI8-R)
  • CJKフォントおよびエンコーディングのサポート

特に最後の点は日本人には嬉しいところ。フォントさえ存在していれば、MS明朝やMSゴシックといったフォントを特に設定をすることなく利用できます。

インストール

Mac OS Xの場合は、MacPortsにlibHaruが登録されているので以下のようにしてインストールすることができます。

$ sudo port install libharu

さらに、PHPからlibHaruを利用するためには、PECLに用意されているharuパッケージをインストールします。

$ sudo pecl install haru
(中略)
 1. Please provide the prefix of libharu installation : autodetect

1-1, 'all', 'abort', or Enter to continue:

インストール中に上記のように表示されlibHaruのインストール先を訊かれるので、allと入力しEnterキーを押した後、パスを入力します。MacPortsでインストールしている場合は/opt/localとします。入力後、再度Enterキーだけを押すとharuモジュールのビルドが始まります。

1-1, 'all', 'abort', or Enter to continue: all
Please provide the prefix of libharu installation [autodetect] : /opt/local
 1. Please provide the prefix of libharu installation : /opt/local

1-1, 'all', 'abort', or Enter to continue:
(中略)
Build process completed successfully
Installing '/opt/local/lib/php/extensions/no-debug-non-zts-20060613/haru.so'
install ok: channel://pecl.php.net/haru-1.0.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=haru.so" to php.ini

ビルドが完了すると上記のようにモジュールがインストールされたパスが表示されるので、php.iniに以下のように設定を追加してharu.soが読み込まれるようにしておきます。

extension_dir="/opt/local/lib/php/extensions/no-debug-non-zts-20060613/"
extension=haru.so

使用例

では、早速PHPからlibHaruを利用して日本語を含んだPDFファイルを生成してみましょう。

useJPEncodings();

// 日本語フォントを利用する
$doc->useJPFonts();

// ドキュメントに新しいページを追加する
$page = $doc->addPage();

// ページのサイズと向きを設定する
$page->setSize(HaruPage::SIZE_A4, HaruPage::LANDSCAPE);

// MSゴシックをCP932エンコーディングで利用する
$font = $doc->getFont('MS-Gothic', '90ms-RKSJ-H');

// フォントのサイズを設定する
$page->setFontAndSize($font, 60);

// 塗の色を設定する
$page->setRGBFill(0, 0, 0);

// 文字を出力する
$page->beginText();
$page->textOut(210, 270, mb_convert_encoding('テストです。', 'SJIS-win', 'UTF-8'));
$page->endText();

// 結果をPDFファイルに保存する
$doc->save('./test.pdf');

上記のコードをUTF-8で保存して実行すると、以下の画像のようなPDFファイルが生成されます。

[caption id="attachment_23" align="alignnone" width="300" caption="libHaruの使用例"]libHaruの使用例[/caption]

次回は、Linux上でlibHaruを使用する場合のインストール手順を紹介します。