技術ブログ - 毎日が成長!

‘PDF’ タグのついている投稿

LinuxでlibHaruを使ったPDF生成を行う

2009年4月1日 水曜日

前回のlibHaruを使ったPDFの生成はMac OS X上での作業でしたので、今回はサーバサイド、CentOS 5.2上でlibHaruを使ったPDF生成をしてみます。

インストール

まず、gccとPHPがインストールされていない場合はあらかじめインストールしておきます。PHPはmbstringモジュール、開発用パッケージ、PEARも必要となるので、php-develとphp-pearもインストールします。

# yum -y install gcc php php-mbstring php-devel php-pear

次に、libHaruのビルドに必要なzlibとlibpngの2つのライブラリをインストールします。

# yum -y install zlib zlib-devel libpng libpng-devel

準備が整ったら、libHaruのソースコードを取得してビルドおよびインストールを行います。

# wget http://libharu.org/files/libharu-2.1.0.tar.gz
# tar xvf libharu-2.1.0.tar.gz
# cd libharu-2.1.0
# ./configure
# make
# make install
# make clean

libHaruのインストールが完了したら、前回と同様にPECLのharuモジュールをインストールします。

# pecl install haru
downloading haru-1.0.0.tgz ...
Starting to download haru-1.0.0.tgz (23,336 bytes)
........done: 23,336 bytes
4 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025
Please provide the prefix of libharu installation [autodetect] : /usr/local

libHaruのインストール先を尋ねられるので、上記のように/usr/localと入力します。

Build process completed successfully
Installing '/var/tmp/pear-build-root/install-haru-1.0.0//usr/lib/php/modules/haru.so'
install ok: channel://pecl.php.net/haru-1.0.0
You should add "extension=haru.so" to php.ini

設定

ビルドが完了すると/usr/lib/php/modules/haru.soが生成されるので、/etc/php.iniに以下の内容を追加します。

extension=haru.so

使用例

前回と同様のコードを作成して、実行してみます。

<?php
// ドキュメントインスタンスを生成する
$doc = new HaruDoc;

// 日本語エンコーディングを利用する
$doc->useJPEncodings();

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

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

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

// 明朝体をCP932エンコーディングで利用する
$font = $doc->getFont('MS-Mincyo', '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');

今回は明朝体を使ってみました(フォント名の指定はMincyoとします)。

libharu

というわけで、Linuxの場合も実に簡単に日本語PDFを生成することができました。

libHaruを使ったPDFの生成

2009年3月30日 月曜日

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ファイルを生成してみましょう。

<?php
// ドキュメントインスタンスを生成する
$doc = new HaruDoc;

// 日本語エンコーディングを利用する
$doc->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ファイルが生成されます。

libHaruの使用例

libHaruの使用例

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