帳票の出力 一覧

 

本当は先に「ひな形のPDF」を作っておきたかったところなのだが、非常に込み入った帳票を全部で8Pも作らないといけないので、かなり時間を要する。

え?国税庁のHPにPDFあるやんって?

確かに、ダウンロードして印刷し、そこに手書きで書き込むならそのまま使えるようにはなっているので、一般の納税者が使う分には何ら問題ない。

が、公式でも何でもない外部のシステムにそのまま取り込めたり、PDF編集ソフトで開けるようなファイルになっているわけもない。
(案の定、mPDFで読み込むことは出来ず、Illustratorでファイルを開くことも出来ない)

まあ、書式は決まっているので、オリジナルにそって自作すればいいわけなのだが、いかんせん時間がかかると。

 

というわけで、先に出力のプログラム側の設計を考える。

青色申告決算書作成までの流れ(超おおまか)

  1. 日々の業務に基づき、仕訳の入力
  2. 決算整理仕訳を行う
  3. 決算整理仕訳を元に、青色申告決算書を作成

と言った具合か。(ざっくりしすぎ)

今回の方針として、ボトムアップで「出力側」から設計を進めて行こうと考えているので、最終的には

  • 「クラス:青色申告決算書」に必要なデータを全て放り込む
  • 「クラス:青色申告決算書」と「帳票:青色申告決算書」をmPDFでマッピングして、出力

といった処理を行うことになる。

ということで、まずは「クラス:青色申告決算書」を設計して、そこから芋づる的に設計を広げていこう・・・という魂胆。
が、帳票が込み入っているということは、「クラス:青色申告決算書」も必然的に複雑になるという寸法。
もちろん細分化は出来る、というか細分化しないと無理なのだが、どのみち「クラス:青色申告決算書」の中に細分化したクラスが集まることになるし、メンバの数が帳票の項目数とほぼ一緒になる見込みなので、結果巨大なクラス図が出来上がる・・・というオチ。
下図がその途中経過のクラス図です。
class_output.png

途中経過でこのザマなので、最終的にはもっと大きなクラス図になってしまうので、先が思いやられる。

 

「簿記システムのWeb化」ということであれば、Javaや.Netもスルーする訳にはいかないが、今回のようなパターンだとハッキリ言ってなじまないだろう。
自分用に作ってみるって話だから、自分が扱えるサーバー環境でないといけないし、レンサバやクラウドで公開するにしても、そこで使えるプラットフォームじゃないとダメ。
そうなってくると、最近のWeb系で多く使われている、PHP・Perl・Ruby・Python 辺りだろうか。(最近のレンサバでRubyやPythonは普通に使えるのか?改めて調べてみないとわからんが・・・)
クラウドの場合、AWSの様に自分でOSレベルから構築していくような環境なら選択肢は多いだろうが、ディスク容量やCPUパワー、メモリあたりのチューニングが出来るだけのクラウドなら、選択肢はレンサバと同程度だろう。

流石に、よほど安いレンサバでなければ、PHPとPerlくらいは動くだろう。PythonやRubyはレンサバ・クラウドの使用次第。Javaや.Netはレンサバじゃおそらく無理だろう。

Javaはセルフマネージドのレンサバやクラウドで初めて選択肢に上がり、.NetはセルフマネージドのWindowsサーバーじゃないと無理。

 

ということで、Javaと.Netはライブラリ名の紹介だけ。

 

Java

Apache PDFBox 、 iText 、 JasperReports Library

 

.Net

iTextSharp 、PDFSharp 、 Report.Net 、 SharpPDF

 

 

前2つの記事に分けて、色々と使えそうなライブラリを調べてみたが、「青色申告決算書」の出力に使えそうなライブラリはある程度絞り込まれた。
基本的には罫線とテキストだけの帳票なのだが、いかんせんマス目・罫線が大量にあるので、罫線を引いたり、固定テキストの出力までWebサービス側でコーディングするのはやってられん、という話です。

なので、最優先事項は「罫線や固定テキストをあらかじめひな形として作っておき、PDF出力時に動的な部分だけデータを生成して出力する」といった使い方ができる、という点になる。
それを踏まえて、候補になるのは以下の組み合わせ。

  • mPDF (PHP)
  • TCPDF+FPDI (PHP)
  • PDF::API2 (Perl)
  • ThinReport (Ruby)

ただ、ThinReportはひな形の形式がPDFではなく、ThinReport Editorが必須。決して一般的なアプリと言う訳ではないし、更新が止まったりして、アプリが使えなくなるリスクもあるかもしれない。かつ、Chromeのアプリなので、Chromeのバージョンアップで更新が止まるというリスクもあるのが考えどころ。
*もっとも、ThinReport Editorで作成されるひな形は「テキストファイル」なので、Editorが使えなくなっても手を打てないわけではない。が、面倒くさい。

他の3つなら、ひな形として作っておくPDFは一般的なものなので、ライブラリを別のものにしなければならなくなった場合でも、PDFはそのまま使えるので、一つ手間が省ける。

 

Ruby

Rubyに関しては、まだまだRubyやRails自体の勉強も必要なんだが、言語の細かい仕様はともかく、「PDFで決算書を出力」という要件を満たせそうかどうかは情報を拾っていけば分かる。

Prown

公式サイト:http://prawnpdf.org/api-docs/2.0/

最新バージョンはv2.1.0で2016年2月のリリース。ライセンスはRubyライセンスとGPLv2 or GPLv3のデュアルライセンスのようだ。
公式サイトの説明を見る限り、Rubyのバージョンは気にしなくても大丈夫のようだ。

基本的には、テキストも図形も全てゴリゴリ実装するスタイルのようなので、マス目の多い帳票向きでは無いように思える。

PDFKit

Github:https://github.com/pdfkit/pdfkit

最新バージョンはv0.8.2で2015年8月リリース。ライセンスはMIT。

別途、wkhtmltopdfが必要。PHPでのPDF出力のときにも登場した名前だが、wkhtmltopdf自体は独立したアプリケーションなので、そのRuby用のラッパーとして動くのがPDFKitということになる。

gemを使ってプロジェクト配下にインストールして使うが、使っているのはwkhtmltopdfなので、PHPの記事で紹介したように、デザイン済みのHTMLをPDF化するというもののようで、PDFであらかじめフォーマットを作っておくというものではないようだ。

Wicked PDF

Github:https://github.com/mileszs/wicked_pdf

別途、wkhtmltopdfが必要。最新バージョンはv1.1.0で、2016年8月リリース。

これもPDFKitと同様、Ruby用のwkhtmltopdfラッパーということらしい。

ThinReports

公式サイト:http://www.thinreports.org/
Github:https://github.com/thinreports/thinreports.org

これはちょっと他のライブラリとは毛色が違っていて、Chrome機能拡張の「Thinreports Editor」で帳票のひな型を作り、「Thinreports Generator for Ruby」をgemでインストールしてRubyアプリケーションからPDFを出力を行う。また、作者も日本の方のようで、公式サイトは日・英両対応。

また、PHPライブラリを調べていたときは気付かなかったのだが、PHP版もあるようだ。

ライセンスはMITで、「Thinreports Generator for Ruby」の最新バージョンはv0.10.0で2017年5月のリリース。(PHP版はv0.8.1で2016年12月リリース)

エディターの出来次第だとは思うが、込み入った帳票で、かつIllustrator等のPDFファイルを作成できるソフトを持っていない場合は面白い選択肢かもしれない。

 

Python

PythonもRubyと同様、詳しくはない言語だが「PDFで決算書を出力」という要件を満たせそうなライブラリがあるかどうか調べてみる。

Python-wkhtml2pdf

Github:https://github.com/qoda/python-wkhtmltopdf

三度登場「wkhtmltopdf」。他の言語でもラッパークラスが提供されているというパターンだったが、Python用のラッパーも存在する。
GithubをみてもChangeLogがないのでバージョンや最終リリース時期は不明。ただ、一番新しそうなソースで3年前と出ている。ライセンスはBSDライセンス。

Sphinx

PythonでPDF出力、といえばこれが出るくらい有名だそうだが、「Pythonで開発したプロジェクトのドキュメントを生成する」ためのツールのようなので、PDF出力用のライブラリというわけではなさそう。
しかも、PDF出力がメインというわけではなく、多数の形式でドキュメントを生成できるうちの一つがPDFということらしい。

reportlab

BSDライセンスで提供されていて、最新バージョンはv3.4.0で2017年3月公開。Pythonのパッケージ管理ツールのpipコマンドを使ってインストールする。
基本的には、テキストも図形も全てゴリゴリ実装するスタイルのようなので、マス目の多い帳票向きでは無いように思える。

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

最終的には「青色申告決算書」を印刷するわけだが、ファイル形式を検討する必要がある。
業務系のシステムなんかでは、いったんファイルに落とすのではなく、システムの機能でダイレクトに印刷させるケースもあるが・・・ユーザー環境への依存度を低くするためには、汎用性の高いファイル形式がベターだろう。
となると、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を読み込む機能はなさそうなので、決算書のような複雑な表組みだとちょっと相性が悪いかもしれない。
 

このページの上部へ

プロフィール

HN:キリ
京都府南部を拠点にフリーのITエンジニアとして活動しています。

サイト内検索

Powered by Movable Type 6.3.2