gnuplotの「データファイルから情報を読み出してきて画像化する」という機能を考えれば、領収書をgnuplotで作ることも可能だということに気づきます。Officeソフトにあるような埋め込み印刷機能の使い方がわからなくても、gnuplotさえあれば簡単に領収書ができます。
以下のようなデータファイルをもとに、gnuplotで領収書を作ります。
山田太郎 1000
田中次郎 15000
佐藤三郎 17000
山中四郎 40000
齋藤五郎 800
渡辺六郎 21400
鈴木七郎 32000
高橋八郎 10040
山本九郎 1400
中村十郎 1216000
加藤十一郎 1200
山下十二郎 10
近藤十三郎 15500
谷十四郎 109000
岸十五郎 0
沖田十六郎 40000
原田十七郎 200
芹沢十八郎 2220
岡田十九郎 2220
笠原二十郎 130000
このデータファイルには、1列目に名前(宛名)が、2列目には金額が記載されています。なお、以下のスクリプトを使う場合、データファイル・スクリプトファイルとも、文字コードをUTF-8Nにしておく必要があります。また、gnuplot 5.0.0以降が必要です。
set encoding utf8
file = "reciept.dat"
name = 1 # データファイル中の宛名の入っているコラムの指定
money = 2 # データファイル中の金額の入っているコラムの指定
hsize = 91.0 #mm
vsize = 55.0 #mm
Hsize = 210.0 # mm (A4 size)
Vsize = 297.0 # mm (A4 size)
bm = 11.0 # mm; bottom margin
tm = 11.0 # mm; top margin
lm = 14.0 # mm; left margin
rm = 14.0 # mm; right margin
# 数字に3桁ごとにカンマを入れる関数
addcomma(x) = (x >= 1000000 ? sprintf("%d,%03d,%03d", int(x)/1000000, (int(x-int(x)/1000000*1e6)/1000), int(x)%1000) : \
(x >= 1000 ? sprintf("%d,%03d", int(x)/1000, int(x)%1000) : sprintf("%d", int(x))))
# データ数の取得
stats file u 0 nooutput
N = STATS_records
set term pdfcairo size 21.0cm,29.7cm font "Meiryo,10" enhanced
set out "reciept.pdf"
set size hsize/Hsize, vsize/Vsize
# 枠線が要らない場合は次行のコメントを外す
#set border 0
unset xtics
unset ytics
set format xy ""
set xrange [0:1]
set yrange [0:1]
set tmargin 0
set bmargin 0
set rmargin 0
set lmargin 0
set label 1 at graph 0.05,0.92 left "領収書" font ",22"
set label 2 at graph 0.95,0.9 right "XXXX年XX月XX日"
set label 3 at graph 0.5,0.42 center "但し、○○代として"
set label 4 at graph 0.5,0.34 center "上記正に領収いたしました。" font ",12"
set label 5 at graph 0.95,0.25 right "京都府京都市左京区吉田本町"
set label 6 at graph 0.95,0.19 right "京都大学××研究科○○研究室"
set label 7 at graph 0.95,0.10 right "京大太郎 ? " font ",12"
do for [i=0:N-1]{
if (i%10 == 0){
set multiplot
}
if (i%10 < 5) {set origin lm/Hsize, (bm+(4-i%10)*vsize)/Vsize}
else {set origin (lm+hsize)/Hsize, (bm+(9-i%10)*vsize)/Vsize}
plot file using (0.5):(0.72):("{/:Bold ". stringcolumn(name) . " 様}") every ::i::i with labels font ",25" notitle,\
file using (0.5):(0.56):("\\\\" . addcomma(column(money)) . "-") every ::i::i with labels font ",30" notitle
if (i%10 == 9){
unset multiplot
}
}
unset multiplot
set term pop
set out
rep
このデータファイルを以下のgnuplotスクリプトで処理すると、こちら(reciept.pdf)のような領収書が作成できます。
これで、急に領収書を作る必要ができた場合でもgnuplotさえあれば慌てる必要がありません。画像ファイルを入れ込んだりすれば、ロゴを入れたり、印影を入れたりもできるはずです。