青色申告決算書をPDFで出力する(その1 PHP、Perl、JavaScriptのライブラリ)

まずは帳票出力の設計からということで、「青色申告決算書」の出力方法を検討してみる。

最終的には「青色申告決算書」を印刷するわけだが、ファイル形式を検討する必要がある。
業務系のシステムなんかでは、いったんファイルに落とすのではなく、システムの機能でダイレクトに印刷させるケースもあるが・・・ユーザー環境への依存度を低くするためには、汎用性の高いファイル形式がベターだろう。
となると、PDFか画像に絞られてくる。ま、この2択ならPDFになってくるか。

PDF出力機能をつけるといっても、その部分を自力でゴリゴリ実装するのも余り現実的ではない。(純粋にプログラミング技術のデモということならそれもありだろうが)というわけで、Webシステムで導入できそうな、ライブラリの類を探してみよう。

PHP系

ググって調べてみると、mPDF、FPDF、html2pdf、wkhtmltopdf、TCPDF、と言ったあたりが引っかかる。

mPDF 

公式サイト:http://www.mpdf1.com/mpdf/index.php

ダウンロードも出来るし、マニュアルも用意はされているが、サイト自体は2016年3月以降「This mPDF website is now closed down.」となっている。
最新版はv6.0で2014年12月に更新されたもの。ライセンスはGPLv2。

個人的に使うならともかく、業務として使おうと思うと、ライセンスがGPLってとこが気になる。

以下、mPDFでPDFを出力するための手順。

  1. 公式サイトからmPDFの使いたいバージョンのzipファイルをダウンロード。
  2. 解凍して、Webサーバーにアップ。(例えば、http://hoge.com/test/output.php でPDFを出力したい場合)
    ・output.php からアクセスできるディレクトリ、例えば"test"ディレクトリ配下に解凍して出来た、"mpdf60"フォルダを丸ごとアップ。
  3. 以下のフォルダに実行のパーミッションを与える。
    "ttfontdata","tmp","graph_cache"

最低限の準備としては、これだけでOKのようだ。
手っ取り早く動作確認したければ、同梱されている多数のサンプルのどれかを実行してみれば良いだろう。

実際に使用する場合は、帳票のフォーマットをPDFファイルとして作っておき、PHPのプログラムからは、

  1. mPDFライブラリの読み込み
  2. 帳票の初期設定(フォントの設定や用紙の向き、PDFファイルの読み込みなど)
  3. HTML形式で帳票のデータ部分を出力
  4. PDFの出力処理

と言った流れになる。
注:日本語を出力したい場合、デフォルトのフォントがいわゆるCKJフォントになっているので、一部の漢字が中華フォントになるので注意。

FPDF

公式サイト:http://www.fpdf.org/

こちらは公式サイトも生きているが、更新されているかは別問題のようで…ただ、日本語のマニュアルもある。(サイトは日本語化されてないので、あくまでもマニュアルだけ。また、日本語マニュアルは最新版に追いついていない)
最新版は2015年12月公開のv1.81となっている。

最新版の日付だけを見るとmPDFより新しいのだが、FPDF本体だけでは日本語が扱えない、との情報も多い。いずれも旧バージョンの話ではあるが、FPDFの派生版を使えだの、他のライブラリと組み合わせて使えといった情報がほとんどで、最新のv1.81についての情報はなかなか出てこない。

また、PDFで予めフォーマットを作っておいて・・・という使い方はできない模様なので、決算書の出力のように、非常にマス目の多い帳票だと苦労しそう。
苦労しそうというか、枠線もPHP側で全部描画してあげないといけないようなので、ちと厳しいか。

html2pdf

公式サイト:http://html2pdf.fr/en/default

公式サイトもあって、最新版の公開は2017年4月とかなり新しいのだが…FPDFと同様、PDFであらかじめフォーマットを作っておいて、ということでは無いようなので、決算書向きではなさそう。また、同名のWebサービスがあるので注意されたい。
*前の2つと比べても、ドキュメントが圧倒的に少ないので、ソースを読まざるをえないというのもキツい。

あと、コイツはライセンス的に大丈夫なのか?という懸念があるので、オープンソース関係のライセンスに相当詳しい人でないとちょっとお薦めできないかも。
本筋からそれるので、別記事で紹介するが、この辺のライセンスの解釈は非常に難しい。ライセンス違反なのかどうなのか、断言はできないのだが、グレーじゃないの?と言うものをお薦めはできないですね。

wkhtmltopdf

公式サイト:https://wkhtmltopdf.org/

最新バージョンは0.12.4。他のライブラリと違って、wkhtmltopdf はバイナリ形式(というか、単体で動作するアプリケーション)なので、PCやWebサーバーにインストールして使うもの。ただ、これだけだとPHPから呼び出して使うことが出来ないので、「mikehaertl/phpwkhtmltopdf」などのラッパークラスを使う。
このラッパークラスもcomposerをつかって導入する必要があるようだ。

また、単体のアプリケーションの機能自体も、デザイン済みのHTMLをPDF化するというもののようで、PDFであらかじめフォーマットを作っておくというものではないようだ。

ライセンスはwkhtmltopdf本体がLGPLv3。ラッパークラスの方はMITとなっている。

TCPDF

公式サイト:https://tcpdf.org/

最新バージョンは6.2.13。このライブラリも単体だと帳票の書式から全部コーディングするタイプなのだが、FPDIというライブラリを組み合わせることで、PDFファイルをテンプレートとして使うことができるようになる。(FPDIの公式サイト:https://www.setasign.com/products/fpdi/about/
ライセンスはTCPDFがLGPLv3、FPDIがMITライセンス。

導入の仕方、使い方はmPDFと似たような手順になるようだが、composerを使って導入する必要があるようだ。

JavaScript

候補として出てくるのは、jsPDF、pdfmake、PDFKit、あたり。
jsPDFとpdfmakeがクライアントサイド、PDFKitがサーバーサイド、ってところか?

jsPDF

公式サイト:https://parallax.typeform.com/to/phzpoR
Github: https://github.com/MrRio/jsPDF

公式サイトの方はダウンロードするのに個人情報の入力が必要だし、情報もあまりないのでGithub推奨。
ライセンスはMIT。

導入は非常にかんたんで、CDNのソースを参照して、実装するだけ。ただ、残念ながら日本語非対応。canvasに日本語描いて画像化してからPDFに取り込む、という手法が必要な模様。
ただ、PDFテンプレートを読む機能はなさそうなので、こみ入った帳票向きではなさそう。

pdfmake

公式サイト:http://pdfmake.org/#/
Github:https://github.com/bpampuch/pdfmake

Githubからソースをダウンロードして、Webサーバーにアップする必要こそあるが、jsPDF同様、アップしたソースを参照して実装するだけ。
日本語非対応との情報あり。ただ、ttfファイルを変換してjsファイルにすれば日本語を扱えるとの情報も。
これも、PDFテンプレートを読む機能はなさそうなので、こみ入った帳票向きではなさそう。

ライセンスはMIT。

PDFKit

公式サイト:https://pdfkit.org/

ライセンスはMIT。Node.js必須。ドキュメントを眺めてみた限りだと、PDFテンプレートを読む機能はなさそうなので、こみ入った帳票向きではなさそう。
日本語はフォントさえちゃんと指定すれば出力できるようだ。

 

Perl

PDF::API2

公式サイト:http://search.cpan.org/dist/PDF-API2/

最新バージョンは2.031で、2017年1月に更新されているので、かなり長い間メンテナンスが継続されている。
ライセンスはLGPLv2.1。このライブラリは既存のPDFを開いてテキストを流し込む、といった用途でも使えそう。

PDFJ

公式サイト:http://hp1.jonex.ne.jp/~nakajima.yasushi/

ここで紹介しているライブラリの多くが海外産で1次情報が英語なので内容を理解するのに苦労するのだが、これは国産のライブラリ。
最新版は0.91RC1で2014年9月のリリース。ライセンスは独自のようだが、「本ソフトウェアは誰でも自由に使用、配布、改良およびそれらの組み合わせをおこなうことができます。ただし、改良したものを配布する場合は原著作者の表示を保持してください。」とあるので、MITライセンスに近いようだ。

XMLファイルを元にPDFファイルを生成できる、という点が大きな特徴。ドキュメントや紹介用スライドをみていると、「論文」をPDFで出力するという機能であったり、LaTexを意識して開発されているようだ。

文章メインの論文やレポートの類であれば、かなり威力を発揮しそうなライブラリだが、既存のPDFを読み込む機能はなさそうなので、決算書のような複雑な表組みだとちょっと相性が悪いかもしれない。
 

コメント

タイトルとURLをコピーしました