WooCommerceでインボイス対応テンプレート

WordPressのプラグインWooCommerce PDF Invoices & Packing Slips用の日本語フォント、スタイルシートとインボイス(日本向け適格請求書)発行テンプレートのセットを無料頒布しています。

テンプレートは、「課税資産の譲渡等の税込価額を税率ごとに区分して合計した金額及び適用税率 」を表示します。返還インボイスも表示します。

メール用テンプレートも一緒にどうぞ–>

プラグインへのリンクはこちら–>

(2025年6月11日  7月22日加筆、修正)
WooCommerce PDF Invoices & Packing Slipsのバージョンアップに伴い、管理画面でアドレス等を再入力したら、アドレスが二重に表示されるようになってしまいました。以前からの設定が上書きされず、新たに入力したデータと一緒に表示されるみたいです。


解決には、本プラグインの設定画面の「ドキュメント」を開いて、左側に縦に並んでいる項目の一番下にある「Advanced」を展開し、「常に最新の設定を使用」にチェックを入れます。こうすると、以前のアドレスは消えて、新しく入力したものが使えます。

ただ、日本の書式にはあっていないので、調整してください。当店の場合はShop Country、Shop State、Shop City、Shop Postcode / ZIPなどほとんどの項目は空欄のままにして、Shop Address Line 1に全部書いています。

(2024年3月14日)
標準課税だけ、あるいは軽減税率だけの場合に他方を出力しないことにしました。ただし、返還インボイスの手数料と送料については常に表示します。

(2023年10月15日)

送料に複数回返金があった場合(まれなこととは思いますが…)に、返還インボイス部分で最初の返金額のみ計算していたバグを修正しました。 

返還インボイスの税率の丸め計算をfloorから整数にキャストに変更しました。
例えば floor(-2.18) は-3、(int)(-2.18) は-2になります。丸め計算をどう考えるかについては規則は無く自由に決めて良いようです。

(2023年10月2日)
「請求書」などのタイトルをステータス毎に書き換えが可能になるようにフィルターフックを追加しました。
ロゴマークの前後にはフックはありましたが、「請求書」などのタイトルだけでロゴマークを使用しない場合にはフックがありませんでした。
そこでフィルターフックを追加しました。これにより、ステータスに合わせてタイトルを書き換えることが可能になります。
functions.phpにたとえば下記のようなコードを追加すればOKです。

add_filter( 'wpo_wcpdf_title_text', 'mypdf_title',10,2);
function mypdf_title($title,$order){
	if ('completed' ==$order->get_status()) {
	$title = '納品書&領収書';
	} 
 return  $title;
}

さらに、ここでは具体例は省きますが、$order->get_payment_method_title() を使えば、決済手段とステータスの組み合わせでタイトルを書き換えることもできます

(2023年9月19日)
ほぼ同じ内容を表示するメール用テンプレートを作成しました。合わせてご活用ください。

(2023年9月13日)
返還インボイス(適格返還請求書)にも対応しました。払い戻しが生じた時に、インボイスと返還インボイス(適格返還請求書)を同時に記載する仕様としました。

全体を見直して、税額は適格請求書のルールに従って、税率ごとに合計した対価の額に対して1回だけ計算するように修正しました。
(余談ですが、WooCommerceの管理画面では商品などの品目毎に税率を掛けて、それらの税を合計しているように見えます。この点が適格請求書のルールと違うようです)

無料頒布中です。なお、ダウンロードすると2023年9月末日まで何度でも使える送料無料クーポンが付いてきます。

開発には当初はchatGPTを使って大まかな枠組みを作りました。
また、このプラグインのコードや海外のQ&Aサイトから多くの知識を得ましたが、税ラベルの取得方法を調べるのには手間取りました。

(2023年8月25日)
テンプレートをインボイス(適格請求書)対応しました。
オリジナルのテンプレートは、「税率ごとの税額」は表示されるのですが、適格請求書の要件の1つである、

「課税資産の譲渡等の税抜価額又は税込価額 を税率ごとに区分して合計した金額及び適用税率

が示されません。

本テンプレートはその点を修正してあります。

ただし、ポイントの扱いに若干の制限があります。また、内税表示を前提としています。ごちゃごちゃと書いたので後でもう少しスッキリした形に書き直そうと思っています。払い戻しについては開発中です 開発終わりました。

https://www.mamekichi-an.com/product/pips4wc/

(2023年8月17日)
商品が5品目ほどで、”ノート”が長いと改ページされてしまうので、幅を80%にしました。さらに、ノートとカスタマーノートの見出しと本文を同じ行にして、全体の行数を少なくするように変更しました。

(2023年8月16日)
バージョン3.6.1で下記の不具合は解消されました。このバグは開発元がマルチバイト文字を考慮しなかったためと思います。


プラグインの最新バージョン3.6.0にバグがあり、文字が???で表示されます。
以前のバージョンに戻す場合は、下記のリンクからダウンロードしてください。

https://ja.wordpress.org/plugins/woocommerce-pdf-invoices-packing-slips/advanced/

あるいは、WP Rollback というプラグインを使うと簡単にバージョンを変更できます。


(2023年8月14日)
ノートとカスタマーノートの文字数が多くても改行しないのでレイアウトが崩れることがありました。テンプレートとCSSを修正して、表示位置を下げて他の要素と干渉しないようにし、かつ幅40%で改行するように修正しました。
100%や50%でも良かったのですがなんとなく40%です。

(2023年4月20日)
invoiceは請求書でPacking Slipsは納品書。でも、Packing Slipsのテンプレートは貧弱なので、invoiceのテンプレートを主に使っています。
デフォルトでは翻訳ファイルによって請求書と翻訳されますが、これをpoeditで納品書に書き替えています。


(2023年4月19日追記)
ダウンロードしてコピーすれば日本語を表示できるキット(style.cssと日本語font)を作成しました。
おまけとして「単価」を表示するテンプレートも入れときました。

https://www.mamekichi-an.com/product/pips4wc/

(2023年4月14日追記)
下記にこのプラグインの説明サイトを紹介していますが、そのページにあるフォントのダウンロードリンクは切れています。いくつかダウンロードサイトがありますが、例えばここからダウンロードすればいいと思う。
「窓の杜」https://forest.watch.impress.co.jp/library/software/ipaexfont/


下の方に書いてあるフォントサブセッティング問題は、このプラグインのフォーラムに愚痴ったら*、サポートの人が設定ページにスイッチを作ってくれました。素晴らしい!

*もちろん英語で愚痴ったのだがtrueをtureと書いてしまった。そのまま残るのは恥ずかしいが、サポートの人(いや多分開発者)は、そんなことに触れることなく速攻で対応してくれました。他の質問を見ていても対応がとても速い。素晴らしい!


WooCommerceは外国製ソフトなので日本語対応が手薄。

バックエンド関係はプラグイン「Woocommerce For Japan」で、ほぼ問題なく日本語表示ができている。

ところが、いざ納品書を出力しようとすると、素のwoocommerceには納品書出力機能がないので、プラグインを使うことになる。検索するといくつもあるのだけが、どれも日本語表示のPDF出力ができない(1年も放ったらかしとか有料プラグインは無視) —->(その後、最初から日本語表示できるプラグインが見つかりました。でも今更変えるの面倒だし、そもそも納品書のレイアウトが気に入らないので、本プラグインを使い続けています)

私が使っているのはWooCommerce PDF Invoices & Packing Slips というプラグイン。

日本語表示できない理由は単に日本語のフォントが付属していないから。

きっとファイルサイズが大きいからだろう。

フリーのフォントはIPAフォントがあるので、それをダンロードすればよい。

さて、ここからが本題。

PDF出力の本体は dompdfというフリーのソフト。

まずは、こいつにフォントをインストールしてやらねばならない……というのは結構ハマる。

最初は、ネットで調べて力技でインストールできた。単にファイルをコピーすればいいというものではなく、あれやこれやとファイルを書き換えたりしなければならない。

でもバージョンアップでディレクトリ構造が変わったり、プラグインのアップデートで上書きされておしまい。

そんなことしなくても、答えはここにあった。

http://docs.wpovernight.com/woocommerce-pdf-invoices-packing-slips/using-custom-fonts/

曰く、あらかじめ、カスタムテンプレートをテーマに作っておいて、そのフォルダにfontsというフォルダを作ってその中にフォントを置き、style.cssでフォントを指定すればOK.

カスタムテンプレートは、

テーマフォルダ/woocommerce/pdf/mytemplate/

というフォルダを作って、Simpleテンプレートの中身をコピーしておく。

テーマフォルダ/woocommerce/pdf/mytemplate/fonts/

というフォルダを作ってそこにフォントをコピーする。

そして、スタイルシート、

テーマフォルダ/woocommerce/pdf/mytemplate/style.css

を開いてフォント名を書き換えてやればいい。

@font-face {
font-family: 'ipaexg';
font-style: normal;
font-weight: normal;
src: local('ipaexg'), local('ipaexg'), url(<?php echo $this->get_template_path(); ?>/fonts/ipaexg.ttf) format('truetype');
}
@font-face {
font-family: 'ipaexg';
font-style: normal;
font-weight: bold;
src: local('ipaexg'), local('ipaexg'), url(<?php echo $this->get_template_path(); ?>/fonts/ipaexg.ttf) format('truetype');
}

font-weightは、normalだけ済むと思っていたら、テンプレートでboldも使っていたので、最低限この2つが必要。

あとはbody でfont-family:ipaexg; と指定してやればOK……と思ったら落とし穴。

このままでは、PDF生成の時にフォントを丸ごと埋め込んでしまうのだ。

毎回数MBをダウンロードなんて…..

やはり、力技は必要だ。

…plugins/woocommerce-pdf-invoices-packing-slips/vendor/dompdf/dompdf/scr/Options.phpの200行目あたりに、

/**
* Whether to enable font subsetting or not.
*
* @var bool
*/
private $isFontSubsettingEnabled = false;

とあるのをtrue に書き換えてやればよい。ファイルサイズが劇的に小さくなる。

しかし、ここはバージョンアップ時に上書きされてしまう…….

どなたか良い方法があったら教えてくださいませ。