Account statement
A three-page statement whose table header repeats and whose running subtotal is carried forward.
This example is also rendered with password: 'demo', so the downloaded PDF asks for it when opened. Try it: the password is demo.
Multi-page table
Carried-forward band
AES-128 password
3 pages
render_statement.rb
ruby
require 'json'
require 'soli/pdf'
template = JSON.parse(File.read('statement.template.json'))
data = JSON.parse(File.read('statement.data.json'))
pdf = Soli::PDF.render(
template: template,
data: data,
title: 'Statement ST-2025-0947',
password: 'demo'
)
File.binwrite('statement.pdf', pdf)
Run it yourself
- Add the gem to your Gemfile — see Installation.
- Download statement.template.json and statement.data.json.
- Run
ruby render_statement.rb.
This PDF is encrypted: the password is demo.
statement.template.json
json
{
"fonts": ["titillium"],
"options": { "header_height": 0 },
"footer": [
{ "type": "paragraph", "value": "${company.name} · Statement ${statement.number} · Page #PAGE# of #TOTAL_PAGE#", "options": { "alignment": "center", "fontSize": 8 } }
],
"content": [
{
"type": "table",
"header_columns": [
{
"content": [
{ "type": "image", "value": "data:image/png;base64,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", "width": 40 },
{ "type": "text", "value": "${company.name}", "fontSize": 19, "fontWeight": "bold" },
{ "type": "text", "value": "${company.tagline}", "fontSize": 9 }
],
"width": 300, "alignment": "left",
"borderSides": { "top": "false", "bottom": "false", "left": "false", "right": "false" }
},
{
"text": "STATEMENT", "width": 181, "fontSize": 24, "fontWeight": "bold", "alignment": "right",
"borderSides": { "top": "false", "bottom": "false", "left": "false", "right": "false" }
}
],
"rows": [],
"options": { "header": { "fillColor": "1F3A5F", "textColor": "FFFFFF" }, "padding_x": 18, "padding_y": 16 }
},
{
"type": "table",
"header_columns": [
{
"text": "Account ${customer.account} · ${customer.name} · Period ${statement.period}",
"width": 481, "fontSize": 10, "fontWeight": "bold", "alignment": "center",
"borderSides": { "top": "false", "bottom": "false", "left": "false", "right": "false" }
}
],
"rows": [],
"options": { "header": { "fillColor": "E7EDF4", "textColor": "1F3A5F" }, "padding_x": 12, "padding_y": 9 }
},
{ "type": "move", "y": 22 },
{
"type": "table",
"data": "lines",
"header_columns": [
{ "text": "DATE", "width": 70, "fontSize": 9, "fontWeight": "bold", "alignment": "left", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" } },
{ "text": "DESCRIPTION", "width": 240, "fontSize": 9, "fontWeight": "bold", "alignment": "left", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" } },
{ "text": "QTY", "width": 40, "fontSize": 9, "fontWeight": "bold", "alignment": "center", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" } },
{ "text": "UNIT", "width": 60, "fontSize": 9, "fontWeight": "bold", "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" } },
{ "text": "AMOUNT", "width": 71, "fontSize": 9, "fontWeight": "bold", "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" } }
],
"rows": [
[
{ "text": "${date}", "width": 70, "fontSize": 9.5, "alignment": "left", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" }, "borderColor": "EAECEF" },
{ "text": "${desc}", "width": 240, "fontSize": 9.5, "alignment": "left", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" }, "borderColor": "EAECEF" },
{ "text": "${qty}", "width": 40, "fontSize": 9.5, "alignment": "center", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" }, "borderColor": "EAECEF" },
{ "text": "${unit}", "width": 60, "fontSize": 9.5, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" }, "borderColor": "EAECEF" },
{ "text": "${amount}", "width": 71, "fontSize": 9.5, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "true" }, "borderColor": "EAECEF" }
]
],
"options": { "header": { "fillColor": "E7EDF4", "textColor": "1F3A5F", "borderColor": "1F3A5F" }, "padding_x": 6, "padding_y": 5 }
},
{ "type": "move", "y": 14 },
{
"type": "table",
"header_columns": [],
"rows": [
[
{ "text": "", "width": 301, "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } },
{ "text": "Subtotal", "width": 100, "fontSize": 10, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } },
{ "text": "${totals.subtotal}", "width": 80, "fontSize": 10, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } }
],
[
{ "text": "", "width": 301, "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } },
{ "text": "Tax (8%)", "width": 100, "fontSize": 10, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } },
{ "text": "${totals.tax}", "width": 80, "fontSize": 10, "alignment": "right", "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } }
],
[
{ "text": "", "width": 301, "borderSides": { "top": "false", "left": "false", "right": "false", "bottom": "false" } },
{ "text": "Balance due", "width": 100, "fontSize": 14, "fontWeight": "bold", "alignment": "right", "borderSides": { "top": "true", "left": "false", "right": "false", "bottom": "false" }, "borderColor": "1F3A5F" },
{ "text": "${totals.balance}", "width": 80, "fontSize": 14, "fontWeight": "bold", "alignment": "right", "borderSides": { "top": "true", "left": "false", "right": "false", "bottom": "false" }, "borderColor": "1F3A5F" }
]
],
"options": { "padding_x": 6, "padding_y": 6 }
},
{ "type": "move", "y": 18 },
{
"type": "paragraph",
"value": "${statement.note}",
"options": { "fontSize": 9, "alignment": "left" }
}
]
}
statement.data.json
json
{
"data": {
"company": {
"name": "Northwind Trading Co.",
"tagline": "Design & production partners"
},
"customer": {
"account": "NW-0481",
"name": "Maison Lumi\u00e8re"
},
"statement": {
"number": "ST-2025-0042",
"period": "Sep 1 \u2013 Nov 30, 2025",
"note": "Statement reflects all billable activity for the period. Balance is due within 30 days of the statement date. Questions? accounts@northwind.example"
},
"lines": [
{
"date": "Sep 11",
"desc": "Consulting \u2014 discovery workshop",
"qty": 1,
"unit": "$180",
"amount": "$180"
},
{
"date": "Sep 21",
"desc": "Brand audit",
"qty": 1,
"unit": "$60",
"amount": "$60"
},
{
"date": "Sep 27",
"desc": "Logo exploration",
"qty": 8,
"unit": "$60",
"amount": "$480"
},
{
"date": "Sep 12",
"desc": "Wordmark refinement",
"qty": 1,
"unit": "$320",
"amount": "$320"
},
{
"date": "Sep 07",
"desc": "Color system",
"qty": 1,
"unit": "$60",
"amount": "$60"
},
{
"date": "Sep 14",
"desc": "Typography pairing",
"qty": 4,
"unit": "$60",
"amount": "$240"
},
{
"date": "Sep 08",
"desc": "Stationery design",
"qty": 1,
"unit": "$320",
"amount": "$320"
},
{
"date": "Sep 14",
"desc": "Business cards",
"qty": 1,
"unit": "$480",
"amount": "$480"
},
{
"date": "Sep 04",
"desc": "Signage \u2014 exterior panel",
"qty": 2,
"unit": "$480",
"amount": "$960"
},
{
"date": "Sep 02",
"desc": "Signage \u2014 interior wayfinding",
"qty": 4,
"unit": "$45",
"amount": "$180"
},
{
"date": "Sep 08",
"desc": "Vinyl lettering",
"qty": 1,
"unit": "$320",
"amount": "$320"
},
{
"date": "Sep 28",
"desc": "Window graphics",
"qty": 1,
"unit": "$120",
"amount": "$120"
},
{
"date": "Sep 14",
"desc": "Packaging \u2014 primary box",
"qty": 1,
"unit": "$320",
"amount": "$320"
},
{
"date": "Sep 04",
"desc": "Packaging \u2014 sleeve",
"qty": 2,
"unit": "$320",
"amount": "$640"
},
{
"date": "Sep 27",
"desc": "Label die-cut",
"qty": 1,
"unit": "$60",
"amount": "$60"
},
{
"date": "Sep 19",
"desc": "Tissue print",
"qty": 2,
"unit": "$150",
"amount": "$300"
},
{
"date": "Sep 04",
"desc": "Web \u2014 homepage layout",
"qty": 8,
"unit": "$60",
"amount": "$480"
},
{
"date": "Sep 19",
"desc": "Web \u2014 product template",
"qty": 1,
"unit": "$480",
"amount": "$480"
},
{
"date": "Sep 07",
"desc": "Web \u2014 CMS setup",
"qty": 6,
"unit": "$320",
"amount": "$1,920"
},
{
"date": "Sep 14",
"desc": "Web \u2014 accessibility pass",
"qty": 3,
"unit": "$240",
"amount": "$720"
},
{
"date": "Sep 19",
"desc": "Photography \u2014 half day",
"qty": 6,
"unit": "$150",
"amount": "$900"
},
{
"date": "Sep 10",
"desc": "Photo retouching",
"qty": 2,
"unit": "$75",
"amount": "$150"
},
{
"date": "Oct 23",
"desc": "Icon set (24)",
"qty": 2,
"unit": "$60",
"amount": "$120"
},
{
"date": "Oct 19",
"desc": "Illustration spot",
"qty": 2,
"unit": "$320",
"amount": "$640"
},
{
"date": "Oct 16",
"desc": "Print management",
"qty": 3,
"unit": "$240",
"amount": "$720"
},
{
"date": "Oct 10",
"desc": "Press check",
"qty": 1,
"unit": "$60",
"amount": "$60"
},
{
"date": "Oct 17",
"desc": "Paper sourcing",
"qty": 4,
"unit": "$75",
"amount": "$300"
},
{
"date": "Oct 25",
"desc": "Foil stamping setup",
"qty": 3,
"unit": "$75",
"amount": "$225"
},
{
"date": "Oct 16",
"desc": "Motion \u2014 logo sting",
"qty": 4,
"unit": "$45",
"amount": "$180"
},
{
"date": "Oct 22",
"desc": "Social templates",
"qty": 1,
"unit": "$320",
"amount": "$320"
},
{
"date": "Oct 19",
"desc": "Email header set",
"qty": 3,
"unit": "$150",
"amount": "$450"
},
{
"date": "Oct 23",
"desc": "Presentation deck",
"qty": 3,
"unit": "$480",
"amount": "$1,440"
},
{
"date": "Oct 16",
"desc": "Copywriting \u2014 tagline",
"qty": 6,
"unit": "$60",
"amount": "$360"
},
{
"date": "Oct 27",
"desc": "Copywriting \u2014 about page",
"qty": 1,
"unit": "$120",
"amount": "$120"
},
{
"date": "Oct 16",
"desc": "Proofreading",
"qty": 1,
"unit": "$45",
"amount": "$45"
},
{
"date": "Oct 24",
"desc": "Localization (FR)",
"qty": 2,
"unit": "$480",
"amount": "$960"
},
{
"date": "Oct 22",
"desc": "Project management",
"qty": 6,
"unit": "$120",
"amount": "$720"
},
{
"date": "Oct 23",
"desc": "Stakeholder review",
"qty": 4,
"unit": "$150",
"amount": "$600"
},
{
"date": "Oct 01",
"desc": "Asset handoff",
"qty": 6,
"unit": "$150",
"amount": "$900"
},
{
"date": "Oct 06",
"desc": "Brand guidelines PDF",
"qty": 1,
"unit": "$240",
"amount": "$240"
},
{
"date": "Oct 02",
"desc": "Consulting \u2014 discovery workshop",
"qty": 2,
"unit": "$120",
"amount": "$240"
},
{
"date": "Oct 05",
"desc": "Brand audit",
"qty": 2,
"unit": "$180",
"amount": "$360"
},
{
"date": "Oct 13",
"desc": "Logo exploration",
"qty": 6,
"unit": "$60",
"amount": "$360"
},
{
"date": "Oct 06",
"desc": "Wordmark refinement",
"qty": 6,
"unit": "$180",
"amount": "$1,080"
},
{
"date": "Nov 18",
"desc": "Color system",
"qty": 2,
"unit": "$75",
"amount": "$150"
},
{
"date": "Nov 27",
"desc": "Typography pairing",
"qty": 4,
"unit": "$320",
"amount": "$1,280"
},
{
"date": "Nov 09",
"desc": "Stationery design",
"qty": 4,
"unit": "$150",
"amount": "$600"
},
{
"date": "Nov 22",
"desc": "Business cards",
"qty": 4,
"unit": "$90",
"amount": "$360"
},
{
"date": "Nov 05",
"desc": "Signage \u2014 exterior panel",
"qty": 1,
"unit": "$75",
"amount": "$75"
},
{
"date": "Nov 05",
"desc": "Signage \u2014 interior wayfinding",
"qty": 2,
"unit": "$90",
"amount": "$180"
},
{
"date": "Nov 01",
"desc": "Vinyl lettering",
"qty": 6,
"unit": "$480",
"amount": "$2,880"
},
{
"date": "Nov 06",
"desc": "Window graphics",
"qty": 2,
"unit": "$120",
"amount": "$240"
},
{
"date": "Nov 01",
"desc": "Packaging \u2014 primary box",
"qty": 1,
"unit": "$180",
"amount": "$180"
},
{
"date": "Nov 18",
"desc": "Packaging \u2014 sleeve",
"qty": 3,
"unit": "$480",
"amount": "$1,440"
},
{
"date": "Nov 19",
"desc": "Label die-cut",
"qty": 3,
"unit": "$75",
"amount": "$225"
},
{
"date": "Nov 23",
"desc": "Tissue print",
"qty": 8,
"unit": "$480",
"amount": "$3,840"
},
{
"date": "Nov 21",
"desc": "Web \u2014 homepage layout",
"qty": 1,
"unit": "$240",
"amount": "$240"
},
{
"date": "Nov 28",
"desc": "Web \u2014 product template",
"qty": 8,
"unit": "$180",
"amount": "$1,440"
},
{
"date": "Nov 13",
"desc": "Web \u2014 CMS setup",
"qty": 4,
"unit": "$180",
"amount": "$720"
},
{
"date": "Nov 04",
"desc": "Web \u2014 accessibility pass",
"qty": 6,
"unit": "$180",
"amount": "$1,080"
}
],
"totals": {
"subtotal": "$35,060",
"tax": "$2,805",
"balance": "$37,865"
}
}
}
More in Business documents