Help us understand the problem. What is going on with this article?

Asciidocで作る請求書

More than 1 year has passed since last update.

フリーランスの皆様こんにちは。
請求書がめんどくさい。

Wordで作るのさえも面倒。

帳票職人としてJaspersoft Studio,ActiveReportsと弄って消耗してます。
帳票ツールも使いたくない。

大門未知子のためにAsciiDocで請求書を作ります。
メロンのお供に請求書。

できたソースはGitHubにフルオープンにしておきます
Invoice_adoc - GitHub

環境

  • Windows10 Pro
  • PowerShell v5.1
  • Visual Studio Code
    • AsciiDoc extension
  • Git-Bash
    • gitに付いてます

請求データ

  • csv
  • UTF8

数量と金額と合計はシェルスクリプトかPowerShellで計算させる。
Linux/Macの方はシェルスクリプトで動く。
Windowsの方はPowerShellを使えばいい。
Gitを導入されている方であればGit-Bashも使えます。

  1. data.csvを作成
  2. 計算済みのデータをresult.csvとして出力

データの入力は人間のやる仕事だ。
しかし、計算は人間のやる仕事ではない。

data.csvを計算させるスクリプトは下記のようになる。

calc.sh
#!/bin/sh

# ヘッダーを取得
sed -n '1p' data.csv > temp/header.csv

# ヘッダー行を抜く
# コンマ区切りで入出力
# 合計の計算
# 明細金額を計算 3行目の数量と4行目の金額を掛ける
# 合計行を追加
cat data.csv | 
sed '1d' | 
awk -F',' 'BEGIN {FS=",";OFS=","}{sum+=$3*$4;print $1,$2,$3,$4,$3*$4} END{print "","","","合計",sum}' > temp/temp.csv
# ヘッダーとデータを結合
cat temp/header.csv temp/temp.csv > result.csv

calc.ps1
# 明細行の計算
$data | 
Select-Object 日付,内容,数量,金額,@{name="明細額";expression={[INT]$_.数量*$_.金額}} |
Export-Csv result.csv -Encoding UTF8 -NoTypeInformation

# 合計を計算
$data=Import-Csv .\result.csv -Encoding UTF8
$sum=$data.明細額 | Measure-Object -Sum
$total=$sum.Sum

# 合計行を追加
",,,合計,$total" |Add-Content -Path .\result.csv -Encoding UTF8

上記のスクリプトを実行させるとdata.csvからresult.csvが出力されます。

data.csv

日付 内容 数量 金額 明細額
3月13日 手術 2 10000000
3月14日 手術 1 13000000

result.csv

日付 内容 数量 金額 明細額
3月13日 手術 2 10000000 20000000
3月14日 手術 1 13000000 13000000
合計 33000000

AsciiDocで入力

下記のように入力します。

AsciiDocを編集するのにおすすめはVSCode。
AsciiDocというPluginを入れればプレビューまではやってくれます。

== 請求書

=== To
帝都医科大学付属病院

〒104-0045 東京都中央区築地9-3

蛭間 重勝 様

=== From

神原名医紹介所

神原 晶

image::stamp.jpg[width=40]

〒135-0031 東京都江東区佐賀1丁目4-1

=== Contents

下記の通り請求申し上げます。
[format="csv", options="header"]
|===
include::result.csv[]
|===

=== 振込先

●●銀行 ●●支店

(普通) 000-000-000000

カンバラメイイショウカイジョ

ポイント

右揃え左揃えはできない。
だから上から順番に書くデザインにする。

result.csvをincludeして表組にしている。
markdownにはない強み。

印鑑を画像で挿入している。
image::stamp.jpg[width=40]
印鑑さえ挿入されていれば何故か正式な文章として受け取ってくれる。

PDFに出力

一番手っ取り早いのはAsciidoctorを使う方法です。

Macの方はbrewでinstallしちゃうのが早いかもしれません。

会社ではLinuxに持ち上げてLinux上のAsciidoctorに処理させています。

asciidoctor-pdf
$ asciidoctor-pdf invoice.adoc

WindowsにもAsciidocFXというツールがあります。
リンクを日本語にすると飛ばない。
今一つ日本語に弱いという問題があります。
最近は使ってません(´;ω;`)

イケてるフリーランスはMacユーザー多いから大丈夫じゃないかな。

生成した請求書のPDFをメール添付で送ってあげれば請求完了!

arachan@github
情報システムという名の雑用係 社内のパソコンをADなしで集中管理したいために PowerShellを少し嗜む。 プログラムよりもUBCD使ってPCを修理するのが得意な逸般人 最近、Win7マシンに軒並み入れ替わったので、 修理マシンがなく、プログラムに精を出し始めたが、 大して何も作れてないマン。 Excel方眼紙とネ申FileMakerが大っ嫌い。
http://arachansan.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした