Zend Framework [7] - Zend_Pdfと日本語

2008.05.12 Author: Jas

数ヶ月ほど投稿が途切れていましたが、Zend Framework入門の続きを投稿したいと思います。
更新が止まっている間に Zend Frameworkの最新バージョンが1.5になりました。

今回の記事からは開発環境が以下のようになります。
開発環境: Zend Framework 1.5.1 / PHP 5.1.6

そこで、今日はZned Framework 1.5からUTF-8に対応するようになったZend_Pdfの紹介をします。
UTF-8に対応したということは・・・?
そう、日本語のPDFを作成できるようになったんです。

以前、Zend_Pdfを試したときには、日本語が見事に文字化けしてしまい、使えないなぁという印象を受けたのですが、Zend Framework 1.5にアップグレードすると、簡単に日本語を含むPDFの作成ができるようになりました。

$pdf = new Zend_Pdf();

// ページの作成
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);

// フォントの指定
$font = Zend_Pdf_Font::fontWithPath('font_path.ttf');
$page->setFont($font, 36);

// テキスト
$page->drawText('abcあいう', 70, 450, 'UTF-8');

// ページの追加
$pdf->pages[] = $page;

// メタデータ
$pdf->properties['Title'] = 'タイトル';
$pdf->properties['Keywors'] = 'キーワード';

// 保存
$pdf->save('sample.pdf');

このスクリプトを実行し、できあがったPDFを開くと、「abcあいう」と表示されているはずです。
っと、ここまでは良かったのですが。

文書のプロパティを開いてみると、$pdf->propertiesで設定したメタデータが文字化けしていました。
残念ながら完全に日本語対応にはなっていないようですね。


Zend_Pdf以外にPHPでPDFを作成するにはFPDFというライブラリがありますが、FPDFにはairwhile氏によって機能拡張されたMBFPDFがあります。
MBFPDFを参考にすると、メタデータの設定時にUTF-16への文字コード変換を行っていました。

そこで、Zend_Pdfでも同様の関数を作り、文字コードの変換を行ってみました。

$pdf->properties['Title'] = Enc2UTF16('たいとる', 'UTF-8');
$pdf->properties['Keywords'] = Enc2UTF16('きーわーど', 'UTF-8');

function Enc2UTF16($txt, $enc) {
  if (mb_detect_encoding($txt) != "ASCII") {
    $txt = chr(254).chr(255).mb_convert_encoding($txt, "UTF-16", $enc);
  }
  return $txt;
}

今度は文字化けせずにメタデータの設定を行うことができました。


Zend Framework 1.5からUTF-8に対応したということでしたが、残念ながら、まだ完全にはマルチバイト文字対応がされていないようです。
この記事では、Zend_Pdfを用いて、メタデータまで日本語対応にする方法をご紹介しましたが、まだまだ他のライブラリの方が使い勝手が良いように感じました。

今後、完全に日本語にも対応できるようになり、パスワード設定による編集制限や印刷制限などの文書暗号化に対応されれば、Zend_Pdfも使いやすくなると思います。

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ