Typesets a report, invoice or one-pager as a designed PDF from Markdown or JSON, in one command.
Say it in your own words; the assistant finds this recipe by itself. Examples:
Make a designed PDF in ONE command with the Typst typesetting engine (no Word, no LaTeX): a report or memo from Markdown with a title block, numbered sections, tables and an accent colour; an invoice from a JSON of lines with VAT and totals; a one-page profile or CV from JSON. Use for: a nice PDF of this text, a PDF report with a cover and page numbers, an invoice PDF, a one-pager PDF, a CV as PDF, et pænt PDF-dokument. Triggers: PDF report, designed PDF, typeset, invoice PDF, faktura som PDF, one-pager, CV, memo as PDF, print-ready.
python3 /skills/designed-pdf/scripts/pdf.py <verb> IN OUT.pdf [options] converts the input with
pandoc where needed and typesets it with Typst (a modern typesetting engine, millisecond
compiles). Inputs are in /work/in or written by you to /work; results in /work/out. Every verb
prints one OK … line (pages, size) or one ERROR … line.
| Need | Command |
|---|---|
| Report or memo from Markdown | pdf.py report /work/notes.md /work/out/notes.pdf --title "Nordic Market Review" --subtitle "Q3 2026" --author "Percerno" [--accent "#0F5C6E"] [--no-cover] [--no-numbers] |
| Invoice from JSON | pdf.py invoice /work/invoice.json /work/out/invoice.pdf |
| One-page profile or CV from JSON | pdf.py onepager /work/profile.json /work/out/profile.pdf |
| Any Typst source you wrote yourself | pdf.py typst /work/doc.typ /work/out/doc.pdf |
Markdown supports headings, paragraphs, bullet and numbered lists, bold/italic, links, block quotes,
code and pipe tables. Section headings are numbered unless --no-numbers.
{"from": {"name": "Percerno ApS", "address": "Vestergade 12, 8000 Aarhus C", "vat": "CVR 12345678", "bank": "Danske Bank · reg. 1234 · account 5678901234"},
"to": {"name": "Fjordline Advisory", "address": "Havnegade 3, 1058 København K", "attn": "Anna Berg"},
"number": "2026-0142", "date": "2026-10-24", "due": "2026-11-23", "currency": "DKK", "vat_rate": 25,
"lines": [{"text": "Consulting, October", "qty": 40, "unit": "hours", "price": 1250}, {"text": "Workshop", "qty": 1, "unit": "pc", "price": 18000}],
"note": "Payment within 30 days. Thank you.", "accent": "#0F5C6E", "lang": "en"}
lang: "da" labels it Faktura/Beløb/Moms. Totals and VAT are computed.
{"name": "Anna Berg", "title": "VP Sales, Fjordline Advisory", "summary": "Twelve years of B2B sales…",
"contact": ["anna@fjordline.dk", "+45 12 34 56 78", "Copenhagen"], "accent": "#0F5C6E",
"sections": [{"heading": "Highlights", "items": ["Grew ARR from 2 to 9 MDKK", "Built a team of 12", "Opened Oslo"]},
{"heading": "Experience", "items": ["2021– Fjordline Advisory, VP Sales", "2016–2021 Nordisk Widgets, Sales Director"]}]}
Fonts available: Libertinus (default), DejaVu, Liberation, Carlito. Give the person the download link.
SKILL.mdgate.jsonscripts/__pycache__/pdf.cpython-311.pycscripts/__pycache__/pdf.cpython-313.pycscripts/pdf.pyWritten by Percerno, MIT licence.