見積書(連続帳票)
複数枚構成の見積書のサンプルです。
ポイント
- 明細テーブルの行数応じてページ数を増やすタイプの帳票を連続帳票と呼びます。
- 連続帳票では,PDFテンプレートの名称を“*”とします。
- “rows”エントリにより,テーブルの最大の行数を指定します。
- context要素の値は,リスト(配列)形式になります。
- tableの値としてテーブルの最大行数を超えるデータを与えると,自動的に必要なページ数に分割します。
- フィールドに「複数行」の指定がなされている場合,文字列中の“\n”の位置で改行します。
- 2ページ目以降の印影と備考欄を非表示にしています。
- 1行おきに背景色を変えるstyle指定を行っています。
Python
#!/usr/bin/env python
# coding: utf-8
import sys
from field import reports
param = {
# テンプレート
"template": [
{"*": {"src": "./mitumori.pdf", "rows": 10}}
],
# フィールド値
"context": [
{
"date": "${NOW}",
"number": "10R0002",
"to": "△△△惣菜株式会社",
"title": "今週の献立",
"delivery_date": "2011-03-01",
"delivery_place": "貴社指定場所",
"payment_terms": "銀行振込",
"expiration_date": "発行から3ヶ月以内",
"stamp1": {"icon": "./stamp.png"},
"table": [
[1, "N001", "豚肉", "200g", 230, 460],
[2, "G001", "エビ", "16尾", 40, 640],
[3, "Y001", "小松菜", "1束", 120, 120],
[4, "Y002", "ミツバ", "2束", 30, 60],
[5, "Y003", "ショウガ", "1かけ", 30, 30],
[6, "Y004", "大根", "1本", 120, 120],
[7, "Y005", "水煮コーン", "1缶", 130, 130],
[8, "K001", "片栗粉", "1袋", 150, 150],
[9, "K002", "コーンスープの元", "2袋", 40, 80],
[10, "T001", "卵", "1パック", 140, 140],
[11, "T002", "牛乳", "1本", 180, 180],
[12, "M001", "絹ごし豆腐", "2丁", 60, 120],
[13, "C001", "みりん", "大さじ2", "‐", "‐"],
[14, "C002", "しょうゆ", "大さじ7", "‐", "‐"],
[15, "C003", "酢", "大さじ4", "‐", "‐"],
[16, "C004", "砂糖", "大さじ3", "‐", "‐"],
[17, "C005", "コショウ", "少々", "‐", "‐"],
[18, "C006", "粉山椒", "少々", "‐", "‐"],
[19, "C007", "赤唐辛子", "1パック", 180, 180],
[20, "C008", "ごま油", "大さじ2", "‐", "‐"],
[21, "C009", "サラダ油", "大さじ4", "‐", "‐"],
[22, "S001", "酒", "大さじ3", "‐", "‐"],
[23, "O001", "ホットケーキミックス", "200g", 80, 160],
[24, "O002", "だし汁", "300ml", "‐", "‐"]
],
"sub_total": 2570,
"tax": 128,
"total": 2699,
"remark": """エビと豆腐のショウガ炒め(4人分)
ミツバの卵とじ(4人分)
大根のピリ辛漬け(4人分)
コーンカップケーキ (4人分)"""
}
],
# スタイル指定
"style": [
{"*.date": {"datetime": "GGE年M月D日"}},
{"*.delivery_date": {"datetime": "GGE年M月D日"}},
{"*.total": {"format": "###,###円"}},
{"*.sub_total": {"format": "###,###円"}},
{"*.tax": {"format": "###,###円"}},
{"*.table.*.[4:6]": {"format": "###,###円"}},
{"[1:].stamp1": {"visible": False}},
{"[1:].remark": {"visible": False}},
{"*.table.[1::2]": {"background-color": [220, 220, 255]}}
]
}
if __name__ == "__main__":
if len(sys.argv) == 2:
reports.set_log_level(3)
reports.render(param, sys.argv[1])
else:
print("usage: %s " % (sys.argv[0], ))
Ruby
#!/usr/bin/env ruby
# coding: utf-8
require 'rubygems'
require 'field/reports'
$param = {
# テンプレート
"template" => [
{"*" => {"src" => "./mitumori.pdf", "rows" => 10}}
],
# フィールド値
"context" => [
{
"date" => "${NOW}",
"number" => "10R0002",
"to" => "△△△惣菜株式会社",
:title => "今週の献立",
"delivery_date" => "2011-03-01",
"delivery_place" => "貴社指定場所",
"payment_terms" => "銀行振込",
"expiration_date" => "発行から3ヶ月以内",
"stamp1" => {"icon" => "./stamp.png"},
"table" => [
[1, "N001", "豚肉", "200g", 230, 460],
[2, "G001", "エビ", "16尾", 40, 640],
[3, "Y001", "小松菜", "1束", 120, 120],
[4, "Y002", "ミツバ", "2束", 30, 60],
[5, "Y003", "ショウガ", "1かけ", 30, 30],
[6, "Y004", "大根", "1本", 120, 120],
[7, "Y005", "水煮コーン", "1缶", 130, 130],
[8, "K001", "片栗粉", "1袋", 150, 150],
[9, "K002", "コーンスープの元", "2袋", 40, 80],
[10, "T001", "卵", "1パック", 140, 140],
[11, "T002", "牛乳", "1本", 180, 180],
[12, "M001", "絹ごし豆腐", "2丁", 60, 120],
[13, "C001", "みりん", "大さじ2", "‐", "‐"],
[14, "C002", "しょうゆ", "大さじ7", "‐", "‐"],
[15, "C003", "酢", "大さじ4", "‐", "‐"],
[16, "C004", "砂糖", "大さじ3", "‐", "‐"],
[17, "C005", "コショウ", "少々", "‐", "‐"],
[18, "C006", "粉山椒", "少々", "‐", "‐"],
[19, "C007", "赤唐辛子", "1パック", 180, 180],
[20, "C008", "ごま油", "大さじ2", "‐", "‐"],
[21, "C009", "サラダ油", "大さじ4", "‐", "‐"],
[22, "S001", "酒", "大さじ3", "‐", "‐"],
[23, "O001", "ホットケーキミックス", "200g", 80, 160],
[24, "O002", "だし汁", "300ml", "‐", "‐"]
],
"sub_total" => 2570,
"tax" => 128,
"total" => 2699,
"remark" => "エビと豆腐のショウガ炒め(4人分)
ミツバの卵とじ(4人分)
大根のピリ辛漬け(4人分)
コーンカップケーキ (4人分)"
}
],
# スタイル指定
"style" => [
{"*.date" => {"datetime" => "GGE年M月D日", :color => :Red}},
{"*.delivery_date" => {"datetime" => "GGE年M月D日"}},
{"*.total" => {"format" => "###,###円"}},
{"*.sub_total" => {"format" => "###,###円"}},
{"*.tax" => {"format" => "###,###円"}},
{"*.table.*.[4:6]" => {"format" => "###,###円"}},
{"[1:].stamp1" => {"visible" => false}},
{"[1:].remark" => {"visible" => false}},
{"*.table.[1::2]" => {"background-color" => [220, 220, 255]}}
]
}
if ARGV.length == 1 then
Field::Reports.set_log_level(3)
Field::Reports.render($param, ARGV[0])
else
p "usage: %s " % $0
end
Perl
#!/usr/bin/env perl
# coding: utf-8
use utf8;
use Field::Reports;
my $param = {
# テンプレート
"template" => [
{"*" => {"src" => "./mitumori.pdf", "rows" => 10}}
],
# フィールド値
"context" => [
{
"date" => "\${NOW}",
"number" => "10R0002",
"to" => "△△△惣菜株式会社",
"title" => "今週の献立",
"delivery_date" => "2011-03-01",
"delivery_place" => "貴社指定場所",
"payment_terms" => "銀行振込",
"expiration_date" => "発行から3ヶ月以内",
"stamp1" => {"icon" => "./stamp.png"},
"table" => [
[1, "N001", "豚肉", "200g", 230, 460],
[2, "G001", "エビ", "16尾", 40, 640],
[3, "Y001", "小松菜", "1束", 120, 120],
[4, "Y002", "ミツバ", "2束", 30, 60],
[5, "Y003", "ショウガ", "1かけ", 30, 30],
[6, "Y004", "大根", "1本", 120, 120],
[7, "Y005", "水煮コーン", "1缶", 130, 130],
[8, "K001", "片栗粉", "1袋", 150, 150],
[9, "K002", "コーンスープの元", "2袋", 40, 80],
[10, "T001", "卵", "1パック", 140, 140],
[11, "T002", "牛乳", "1本", 180, 180],
[12, "M001", "絹ごし豆腐", "2丁", 60, 120],
[13, "C001", "みりん", "大さじ2", "‐", "‐"],
[14, "C002", "しょうゆ", "大さじ7", "‐", "‐"],
[15, "C003", "酢", "大さじ4", "‐", "‐"],
[16, "C004", "砂糖", "大さじ3", "‐", "‐"],
[17, "C005", "コショウ", "少々", "‐", "‐"],
[18, "C006", "粉山椒", "少々", "‐", "‐"],
[19, "C007", "赤唐辛子", "1パック", 180, 180],
[20, "C008", "ごま油", "大さじ2", "‐", "‐"],
[21, "C009", "サラダ油", "大さじ4", "‐", "‐"],
[22, "S001", "酒", "大さじ3", "‐", "‐"],
[23, "O001", "ホットケーキミックス", "200g", 80, 160],
[24, "O002", "だし汁", "300ml", "‐", "‐"]
],
"sub_total" => 2570,
"tax" => 128,
"total" => 2699,
"remark" => "エビと豆腐のショウガ炒め(4人分)
ミツバの卵とじ(4人分)
大根のピリ辛漬け(4人分)
コーンカップケーキ (4人分)"
}
],
# スタイル指定
"style" => [
{"*.date" => {"datetime" => "GGE年M月D日", "color" => "Red"}},
{"*.delivery_date" => {"datetime" => "GGE年M月D日"}},
{"*.total" => {"format" => "###,###円"}},
{"*.sub_total" => {"format" => "###,###円"}},
{"*.tax" => {"format" => "###,###円"}},
{"*.table.*.[4:6]" => {"format" => "###,###円"}},
{"[1:].stamp1" => {"visible" => "False"}},
{"[1:].remark" => {"visible" => "False"}},
{"*.table.[1::2]" => {"background-color" => [220, 220, 255]}}
]
};
if (@ARGV == 1) {
Field::Reports::set_log_level(3);
Field::Reports::render($param, $ARGV[0]);
} else {
die "usage: $0 \n";
}
PHP
<?php
$param = array(
# テンプレート
"template" => array(
array("*" => array("src" => "./mitumori.pdf", "rows" => 10))
),
# フィールド値
"context" => array(
array(
"date" => "\${NOW}",
"number" => "10R0002",
"to" => "△△△惣菜株式会社",
"title" => "今週の献立",
"delivery_date" => "2011-03-01",
"delivery_place" => "貴社指定場所",
"payment_terms" => "銀行振込",
"expiration_date" => "発行から3ヶ月以内",
"stamp1" => array("icon" => "./stamp.png"),
"table" => array(
array(1, "N001", "豚肉", "200g", 230, 460),
array(2, "G001", "エビ", "16尾", 40, 640),
array(3, "Y001", "小松菜", "1束", 120, 120),
array(4, "Y002", "ミツバ", "2束", 30, 60),
array(5, "Y003", "ショウガ", "1かけ", 30, 30),
array(6, "Y004", "大根", "1本", 120, 120),
array(7, "Y005", "水煮コーン", "1缶", 130, 130),
array(8, "K001", "片栗粉", "1袋", 150, 150),
array(9, "K002", "コーンスープの元", "2袋", 40, 80),
array(10, "T001", "卵", "1パック", 140, 140),
array(11, "T002", "牛乳", "1本", 180, 180),
array(12, "M001", "絹ごし豆腐", "2丁", 60, 120),
array(13, "C001", "みりん", "大さじ2", "‐", "‐"),
array(14, "C002", "しょうゆ", "大さじ7", "‐", "‐"),
array(15, "C003", "酢", "大さじ4", "‐", "‐"),
array(16, "C004", "砂糖", "大さじ3", "‐", "‐"),
array(17, "C005", "コショウ", "少々", "‐", "‐"),
array(18, "C006", "粉山椒", "少々", "‐", "‐"),
array(19, "C007", "赤唐辛子", "1パック", 180, 180),
array(20, "C008", "ごま油", "大さじ2", "‐", "‐"),
array(21, "C009", "サラダ油", "大さじ4", "‐", "‐"),
array(22, "S001", "酒", "大さじ3", "‐", "‐"),
array(23, "O001", "ホットケーキミックス", "200g", 80, 160),
array(24, "O002", "だし汁", "300ml", "‐", "‐")
),
"sub_total" => 2570,
"tax" => 128,
"total" => 2699,
"remark" => "エビと豆腐のショウガ炒め(4人分)
ミツバの卵とじ(4人分)
大根のピリ辛漬け(4人分)
コーンカップケーキ (4人分)"
)
),
# スタイル指定
"style" => array(
array("*.date" => array("datetime" => "GGE年M月D日", "color" => "Red")),
array("*.delivery_date" => array("datetime" => "GGE年M月D日")),
array("*.total" => array("format" => "###,###円")),
array("*.sub_total" => array("format" => "###,###円")),
array("*.tax" => array("format" => "###,###円")),
array("*.table.*.[4:6]" => array("format" => "###,###円")),
array("[1:].stamp1" => array("visible" => "False")),
array("[1:].remark" => array("visible" => "False")),
array("*.table.[1::2]" => array("background-color" => array(220, 220, 255)))
)
);
fr_set_log_level(3);
fr_render($param, $argv[1]);
?>