PDF generation via LaTeX — structured data in, professional documents out
Project description
English version: README.en.md
Klartex
PDF-generering via LaTeX — strukturerad data in, professionella dokument ut.
klartex.se · PyPI · GitHub
Klartex tar JSON-data + mallnamn och producerar PDF via XeLaTeX. Kan användas som Python-bibliotek, CLI-verktyg eller HTTP-tjänst.
Mallar
| Mall | Beskrivning |
|---|---|
_block |
Universell blockmotor — agenten komponerar dokumentet fritt |
protokoll |
Mötesprotokoll med dagordning, beslut och justerare |
faktura |
Faktura med rader, moms och betalningsinformation |
resultatrakning |
Resultaträkning med jämförelseår och noter |
balansrakning |
Balansräkning med tillgångar och skulder/eget kapital |
budgetrapport |
Budgetrapport med kontokoder, budget och utfall |
sie-exportrapport |
Läsbar PDF av SIE4-bokföringsdata |
Installation
# Som globalt CLI-verktyg
pipx install klartex
# Eller i ett projekt
pip install klartex
Kräver Python ≥ 3.12 och XeLaTeX (brew install --cask mactex eller apt install texlive-xetex).
Användning
Som Python-bibliotek
from klartex import render
pdf_bytes = render("protokoll", data)
Som CLI
# Rendera (block engine är default)
klartex -d data.json
# Pipe JSON via stdin
cat data.json | klartex
# Med explicit mall
klartex -d data.json -t protokoll
# Med extern sidmall
klartex -d data.json --page-template minforening.tex.jinja
# Lista mallar
klartex templates
# Visa JSON Schema för en mall
klartex schema protokoll
# Starta HTTP-server
klartex serve
Som HTTP-tjänst
klartex serve --port 8000
# Rendera PDF
curl -X POST http://localhost:8000/render \
-H "Content-Type: application/json" \
-d '{"template": "protokoll", "data": {...}}' \
-o output.pdf
# Rendera med extern sidmall
curl -X POST http://localhost:8000/render \
-H "Content-Type: application/json" \
-d '{"template": "_block", "data": {...}, "page_template_source": "\\definecolor{brandprimary}{HTML}{2E5A1C}\\n..."}' \
-o output.pdf
# Lista mallar
curl http://localhost:8000/templates
# Hämta schema
curl http://localhost:8000/templates/protokoll/schema
Sidmallar (Page Templates)
Sidmallar styr sidhuvud, sidfot, färger och logotyp. Tre inbyggda finns:
| Sidmall | Beskrivning |
|---|---|
formal |
Organisationsnamn och kontaktinfo i sidhuvud, logotyp, sidnummer i sidfot |
clean |
Enbart logotyp i sidhuvud, sidnummer i sidfot |
none |
Inget sidhuvud, enbart sidnummer i sidfot |
Egen sidmall
Skapa en .tex.jinja-fil som definierar \fancyhead/\fancyfoot:
\definecolor{brandprimary}{HTML}{2E5A1C}
\definecolor{brandsecondary}{HTML}{555555}
\providecommand{\orgname}{}
\renewcommand{\orgname}{Min Förening}
\makeatletter
\fancyhead[L]{\fontsize{6pt}{9pt}\selectfont\textbf{\orgname}}
\fancyhead[R]{\includegraphics[height=0.855cm]{logo.pdf}}
\fancyfoot[C]{%
\kx@setlang%
\fontsize{6pt}{9pt}\selectfont\color{brandsecondary}%
\doctitle\ \textbullet\ \kx@page\ \thepage\ \kx@of\ \pageref{LastPage}%
}
\makeatother
Använd sedan --page-template minforening.tex.jinja i CLI eller "page_template_source": "..." i API-anrop. Logotyper och andra filer hittas relativt till arbetsmappen.
Arkitektur
Klartex har en trelagers-arkitektur:
- Dokumentnivå —
klartex-base.clshanterar siduppställning och grundläggande sidhuvud/sidfot. Sidmallar (.tex.jinja) injiceras i preambeln och styr färger, logotyp och layout. - Komponentnivå — Återanvändbara
.sty-paket som ger strukturerade LaTeX-makron (t.ex.klartex-signatureblock.sty,klartex-klausuler.sty,klartex-agenda.sty) - Receptnivå — YAML-filer som deklarerar vilka komponenter och innehållsfält som ska kombineras
Renderingsvägar
- Recipe-mallar (
protokoll,faktura) — YAML-recept som deklarerar komponenter och mappningar - Block engine (
_block) — Agenten komponerarbody[]fritt från typade block
Skapa en YAML-receptmall
Skapa en recipe.yaml i mallens katalog (t.ex. klartex/templates/min-mall/recipe.yaml):
template:
name: min-mall
description: "Beskrivning av mallen"
lang: sv
document:
title: "{{ data.title }}"
page_template: formal
metadata:
- label: "Datum:"
field: date
components:
- type: klausuler
data_map:
items: agenda_items
options:
item_title_field: title
item_body_field: body
schema: schema.json
Tillgängliga recept-komponenter: heading, description_list, attendees, klausuler, signatureblock, titelsida, invoice_header, invoice_recipient, invoice_table, payment_info, invoice_note.
Block engine-block: heading, text, list, table, callout, quote, title_page, parties, clause, signatures, description_list, form, columns, agenda, name_roster, resultatrakning, budgettabell, notapparat, page_break, latex.
Årsmötespaket
Blockmotorn kan komponera alla dokument som behövs för ett föreningsårsmöte:
| Dokument | Blocktyper |
|---|---|
| Kallelse + dagordning | heading, description_list, agenda |
| Verksamhetsberättelse | heading, name_roster, text, signatures |
| Ekonomisk årsredovisning | heading, text, resultatrakning, notapparat, signatures |
| Revisionsberättelse | heading, text, signatures |
| Budget | heading, budgettabell |
| Valberedningens förslag | heading, name_roster, signatures |
| Motion | heading, text, clause, signatures |
| Styrelsens yttrande | heading, text, signatures |
Agenten väljer och ordnar block för varje dokument — inga separata mallar behövs. Se tests/fixtures/block_kallelse.json m.fl. för fullständiga exempel.
Licens
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file klartex-0.9.4.tar.gz.
File metadata
- Download URL: klartex-0.9.4.tar.gz
- Upload date:
- Size: 50.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
822fd56bbb40bdb9d5e646c2f5438b805e4821dc24c65e12d9bc7a8bc84dcc31
|
|
| MD5 |
8e6a74e9b7ac6746bafa80c6df515084
|
|
| BLAKE2b-256 |
4d46d022cc1a58f52b9ba21677811d362755ca61d20429ffb43f2705caa4bbdb
|
Provenance
The following attestation bundles were made for klartex-0.9.4.tar.gz:
Publisher:
publish.yml on swedev/klartex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
klartex-0.9.4.tar.gz -
Subject digest:
822fd56bbb40bdb9d5e646c2f5438b805e4821dc24c65e12d9bc7a8bc84dcc31 - Sigstore transparency entry: 1438030803
- Sigstore integration time:
-
Permalink:
swedev/klartex@e43e421dc4d3e82445a09142088cf99743e25de7 -
Branch / Tag:
refs/tags/v0.9.4 - Owner: https://github.com/swedev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e43e421dc4d3e82445a09142088cf99743e25de7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file klartex-0.9.4-py3-none-any.whl.
File metadata
- Download URL: klartex-0.9.4-py3-none-any.whl
- Upload date:
- Size: 71.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
456d90b405eaa84475c1251a0906b9f03c71fd6f52de19d5a21f6a442c5d7601
|
|
| MD5 |
718602f85ffe50f5297b1b8c2471a978
|
|
| BLAKE2b-256 |
29a280e64681cad0a1f3b2fd3f554ca2fd77831d7968b66b10f29069ecf55a42
|
Provenance
The following attestation bundles were made for klartex-0.9.4-py3-none-any.whl:
Publisher:
publish.yml on swedev/klartex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
klartex-0.9.4-py3-none-any.whl -
Subject digest:
456d90b405eaa84475c1251a0906b9f03c71fd6f52de19d5a21f6a442c5d7601 - Sigstore transparency entry: 1438030814
- Sigstore integration time:
-
Permalink:
swedev/klartex@e43e421dc4d3e82445a09142088cf99743e25de7 -
Branch / Tag:
refs/tags/v0.9.4 - Owner: https://github.com/swedev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e43e421dc4d3e82445a09142088cf99743e25de7 -
Trigger Event:
release
-
Statement type: