HTML-to-PDF generator with pagination and validation
Project description
pdfgen-juanipis
Libreria para generar PDFs a partir de data estructurada (HTML + WeasyPrint), con paginacion, validacion y soporte JSON/YAML.
Quickstart
Desde este repo (usa tu .venv si ya la tienes):
pip install -e .
pdfgen-juanipis render examples/demo.yaml examples/demo.pdf --root .
Resultados:
examples/demo.pdfgenerado con assets demo incluidos
Instalacion
Desde el repo:
pip install -e .
Desde PyPI:
pip install pdfgen-juanipis
Que archivos de configuracion usa
No hay un archivo unico de configuracion. PDFGenConfig.from_root(root_dir) arma la configuracion por convencion:
- Si existe
template/en tu proyecto, usatemplate/boletin_template.html.jinjaytemplate/boletin.css - Si no existe
template/, usa los templates incluidos en el paquete fonts.confenroot_dires opcional; si no existe se ignoraassets/enroot_dires opcional; si no existe se usan assets del paquete cuando corresponda
En resumen: la configuracion se define por la estructura de carpetas, no por un archivo config.*.
Estructura recomendada del proyecto
mi-proyecto/
assets/
banner.png
logo.png
template/
boletin_template.html.jinja
boletin.css
fonts.conf (opcional)
data.yaml
Assets demo incluidos
Para jugar sin preparar assets, puedes referenciar nombres simples como banner.png y logo.png.
Resolucion de rutas:
- Primero busca en
root_dir/assets/ - Si no existen, usa los assets incluidos en el paquete (
src/pdfgen_juanipis/assets/)
Assets de demo incluidos:
banner.pngbanner-clean.pnglogo.pngfigure.pngmap.pngchart.png
Uso basico (Python)
from pdfgen_juanipis.api import PDFGenConfig, PDFGen
config = PDFGenConfig.from_root("/ruta/a/tu/proyecto")
pdf = PDFGen(config)
pdf.render(data, output_path="salida.pdf", paginate=True, validate=True)
Atajo:
from pdfgen_juanipis.api import render_with_defaults
render_with_defaults(data, output_path="salida.pdf", root_dir="/ruta/a/tu/proyecto")
Salida en bytes:
from pdfgen_juanipis.api import render_with_defaults_bytes
pdf_bytes = render_with_defaults_bytes(data, root_dir="/ruta/a/tu/proyecto")
Estructura minima del data
data = {
"theme": {
"header_banner_path": "banner.png",
"header_banner_path_cont": "banner-clean.png",
"header_logo_path": "logo.png",
"title_line1": "Titulo",
"title_line2": "Subtitulo",
"footer_site": "example.org",
"footer_phone": "Contacto: +1 555 0100"
},
"sections": [
{
"title": "I. Introduccion",
"content": [
{"type": "text", "text": "Texto con <strong>negrita</strong>."}
]
}
]
}
Notas:
header_banner_path_contes opcional (banner limpio para paginas continuas)- Puedes trabajar sin assets propios usando los demo (ver seccion Assets)
Bloques con assets demo (para jugar)
data = {
"theme": {
"header_banner_path": "banner.png",
"header_logo_path": "logo.png",
"title_line1": "Demo",
"title_line2": "Assets incluidos"
},
"sections": [
{
"title": "Figuras y mapas",
"content": [
{"type": "figure", "path": "figure.png", "caption": "Figura demo"},
{"type": "figure", "path": "chart.png", "caption": "Grafica demo", "wide": True},
{"type": "map_grid", "items": [{"path": "map.png", "label": "Mapa demo"}]}
]
}
]
}
Estilos inline
Los bloques de texto aceptan HTML:
<strong>negrita<em>italica<u>subrayado<s>tachado
CLI
Render (JSON o YAML):
pdfgen-juanipis render data.json salida.pdf --root /ruta/proyecto
pdfgen-juanipis render data.yaml salida.pdf
Validar (sin generar PDF):
pdfgen-juanipis validate data.yaml
Desde stdin (YAML por defecto):
cat data.yaml | pdfgen-juanipis render - salida.pdf
Opciones utiles:
--template-dirusar tu template--cssusar tu CSS--fonts-confusar unfonts.confpropio--fonts-dirusar un directorio con.ttf--css-extrainyectar CSS adicional--no-validatedesactivar validacion--no-paginatedesactivar paginacion--stdoutescribir bytes a stdout
Personalizacion
Fuentes propias (Python):
config = PDFGenConfig.from_root("/ruta/a/tu/proyecto")
config.fonts_conf = "/ruta/a/mi/fonts.conf"
PDFGen(config).render(data, "salida.pdf")
Fuentes propias (CLI):
pdfgen-juanipis render data.json salida.pdf --fonts-dir /ruta/a/mis/fuentes
Colores/estilos rapidos:
css_extra = ":root { --blue-title: #0b7285; --orange-footer: #f08c00; }"
render_with_defaults(data, "salida.pdf", root_dir="/ruta", css_extra=css_extra)
Template y CSS propios:
pdfgen-juanipis render data.json salida.pdf --template-dir /ruta/template --css /ruta/template/boletin.css
Ejemplos
examples/minimal.yamlexamples/minimal.jsonexamples/demo.yamlexamples/demo.pdfnotebooks/demo.ipynbnotebooks/usage.ipynbnotebooks/bytes.ipynbnotebooks/advanced.ipynb
Generar el demo con un script
./scripts/make_demo.sh
Validacion
Se valida automaticamente con schema.json. Los warnings se imprimen en consola.
Si quieres desactivar:
pdf.render(data, output_path="salida.pdf", validate=False)
Solucion de problemas
- Assets no encontrados: asegurate de ponerlos en
root_dir/assets/o usa los nombres demo incluidos. - Warnings de
schema: instalajsonschemao desactiva la validacion con--no-validate. - Warnings de
Fontconfig: puedes proveer unfonts.confpropio o ignorarlos si el PDF se genera bien. - Imagenes no aparecen: verifica que los paths sean relativos (se resuelven contra
assets/) o absolutos.
Licencia
MIT
Releases
Al hacer push a main, el workflow Auto Release crea tag y Release si la version en pyproject.toml es nueva, y publica automaticamente en PyPI.
Hecho por Juanipis
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 pdfgen_juanipis-0.1.12.tar.gz.
File metadata
- Download URL: pdfgen_juanipis-0.1.12.tar.gz
- Upload date:
- Size: 502.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ffcd2d20caff545f2bbc6ecd9ece83d4b0eae6d888948d109b0a21a84f005d6
|
|
| MD5 |
96c57c899acdb7470eaa11bab0f5ee1f
|
|
| BLAKE2b-256 |
ec74fea508135a4e9f73914f3d3b650ba007173d9661a2e83144c325bfad91fd
|
Provenance
The following attestation bundles were made for pdfgen_juanipis-0.1.12.tar.gz:
Publisher:
auto-release.yml on Juanipis/pdfgen-juanipis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pdfgen_juanipis-0.1.12.tar.gz -
Subject digest:
9ffcd2d20caff545f2bbc6ecd9ece83d4b0eae6d888948d109b0a21a84f005d6 - Sigstore transparency entry: 1191407928
- Sigstore integration time:
-
Permalink:
Juanipis/pdfgen-juanipis@e167a5cf04bf7bfb7a3ed0c0db8c3868701bb736 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Juanipis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@e167a5cf04bf7bfb7a3ed0c0db8c3868701bb736 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pdfgen_juanipis-0.1.12-py3-none-any.whl.
File metadata
- Download URL: pdfgen_juanipis-0.1.12-py3-none-any.whl
- Upload date:
- Size: 525.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a30723e764f83f78e5a36a93cc46a38549113e69f7b70b4c9832605d9e754e7
|
|
| MD5 |
df60f22f972079656a81a2f3b872197a
|
|
| BLAKE2b-256 |
bbe8dcc1c5afcf2092d39881e116db44363fe16d4c844ccc901acc7366bc1faa
|
Provenance
The following attestation bundles were made for pdfgen_juanipis-0.1.12-py3-none-any.whl:
Publisher:
auto-release.yml on Juanipis/pdfgen-juanipis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pdfgen_juanipis-0.1.12-py3-none-any.whl -
Subject digest:
7a30723e764f83f78e5a36a93cc46a38549113e69f7b70b4c9832605d9e754e7 - Sigstore transparency entry: 1191407930
- Sigstore integration time:
-
Permalink:
Juanipis/pdfgen-juanipis@e167a5cf04bf7bfb7a3ed0c0db8c3868701bb736 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Juanipis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-release.yml@e167a5cf04bf7bfb7a3ed0c0db8c3868701bb736 -
Trigger Event:
push
-
Statement type: