LoginSignup
5
5

More than 5 years have passed since last update.

Asciidocで作る請求書

Last updated at Posted at 2019-03-20

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

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をメール添付で送ってあげれば請求完了!

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5