PDFファイルを生成するためのPHPライブラリ「TCPDF」

PDFファイルを生成するためのPHPライブラリ「TCPDF」昨年末にWordPressの投稿や固定ページをPDF形式でダウンロード出来るようにするプラグイン、「POST2PDF Converter」をリリースしたところ、予想外に反響があった。

そもそも、同様の機能を持つプラグインは既に複数存在しており、「POST2PDF Converter」は、特に目新しいプラグインではないのであるが・・・。

投稿や固定ページをPDFへ変換するプラグインのうち、人気のものは外部のオンラインサービスを利用してPDFファイルの変換している。

例えば、「Print Friendly and PDF Button」は、「printfriendly」と言うサービスを利用してPDFに変換している。

また、「PDF24 Article To PDF」は、「PDF24」というサービスを利用しており、「PDF & Print Button Joliprint」は、「joliprint」を利用している。

これらのサービスは、PDF変換以外の機能も提供しているケースが多く、概ね高機能である。

対して「POST2PDF Converter」は、「TCPDF」というオープンソースのPHPライブラリを利用しており、外部サービスに依存せず、サーバー上で変換を行う。

もっとも、「TCPDF」を利用したプラグインは、以前から他にも存在しており、この点でも「POST2PDF Converter」が特に目新しいものでは無いのであるが・・・。

どちらかと言えば、「TCPDF」を利用したプラグインは、WordPressのプラグインの中ではマイナーな部類になるが、それは「TCPDF」が機能的に劣ると言うことではなく、UTF-8のWordPressコンテンツとも基本的に相性が良い。

「TCPDF」は、イタリア人のNicola Asuni氏(Tecnick.com S.r.l)によって開発されたPHPライブラリであり、「FPDF」の派生である。

このライブラリを使用するには、PHP 5が必要であるが、PHP 4用のパッケージも用意されている。

PHPのライブラリであるが故に、WordPressとの相性も良く、簡単な記述でDBからHTML形式のコンテンツ取得し、それを「TCPDF」に渡してPDF形式に変換することが出来る。

また、グラフやQRコードなどのバーコードの描画も可能であり、工夫次第で、かなり凝ったPDFを生成できるようになっている。

APIは単純とは言えないが、僅かなコードの追加でHTMLをPDFに変換するための処理を記述できる。
WordPressのようにコンテンツをHTML形式で取得し易いシステムであれば、導入に苦はないはずである。

PDFへの変換処理に関しては「TCPDF Examples」でサンプルが用意されているので、これを真似て書くと手っ取り早いだろう。

少し版は古いが「MONZEN.ORG」で日本語ドキュメントが用意されているので、これも参考になる。

ディレクトリパス、フォント、フォントサイズと言った設定パラメーターは「/config/tcpdf_config.php」で定数として設定する形になっており、必要に応じてこれを編集する。

「/config/lang」ディレクトリには、各言語用の設定ファイルが格納されている。

バージョン5.9.145からは日本語用の設定ファイル「jpn.php」が同行されているので、これを使えば良いが、設定ファイルの記述自体は単純であり、足りない言語の設定ファイルも簡単に自作することが出来る。

$l['a_meta_charset'] で文字コード、$l['a_meta_dir']で記述方向(左から右ならltr、右から左ならrtl)、$l['a_meta_language']で言語コード定義する。

そして、$l['w_page']では、「page」の訳を定義する。

下記は、UTF-8、日本語の場合の記述例である。

// Japanese

global $l;
$l = Array();

// PAGE META DESCRIPTORS --------------------------------------

$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'ltr';
$l['a_meta_language'] = 'ja';

// TRANSLATIONS --------------------------------------
$l['w_page'] = 'ページ';

//============================================================+
// END OF FILE
//============================================================+

この設定ファイルは、最初にrequire_once()で読みこめば良い。

更にもう1つ、言語によって変更すべき要素があり、それがフォントである。

フォントは、setHeaderFont、setFooterFont、SetFont、SetDefaultMonospacedFontメソッドで指定する。

なお、SetDefaultMonospacedFontでは、プロポーショナルフォントを指定することは出来ず、等幅フォントを指定する必要がある。

標準の日本語フォントは、

  • cid0jp(ArialUnicodeMS)
  • kozgopromedium(Kozuka Gothic Pro)
  • kozminproregular(Kozuka Mincho Pro)

の3つであるが、残念ながら文字化け等が発生するケースがある。

場合によっては、オープンソースのTrueType日本語フォントなどをTCPDF用に変換して、それを使った方が良いかもしれない。

バージョン5.9.123からは、TrueTypeフォントをTCPDF用に変換するためのメソッド、addTTFfont()が追加されたので、フォントの変換の際にはこれを利用する。

また、5.9.122以前に同梱されていたツールを使っても良い。

なお、このサイトでもオープンソースのIPAフォントと梅フォントをTCPDF用に変換したものを公開している。

TCPDFは、HTMLタグを解釈し、タグに従ってレイアウトを行った上でPDFに変換するが、全てのタグや属性を正しく解釈できる訳ではない。

また、通常ウェブサイトは、別途CSSを読み込んでレイアウトを行なっているが、このCSSがPDFに反映される訳でもない。(あくまでHTMLのみ解釈する。)

そのため、生成したPDFは、実際のウェブサイトとレイアウトが異なってしまう場合が多い。

必要であれば、HTMLにstyle属性を付加するなどして、微調整する必要がある。

PDFに変換される事を意識してHTMLを書くのも良いし、HTMLをそのままTCPDFに渡すのではなく、その前の段階で、HTMLをTCPDFに最適化させる処理を入れても良い。

拘れば、ここが最も面倒な作業になるだろう。



PHP, WordPress, ネット・PC, , Permalink