ReportTemplate¶
Configuración para personalizar el estilo de reportes PDF.
Importación¶
Constructor¶
@dataclass
class ReportTemplate:
# Configuración básica
logo_path: Path | None = None
primary_color: str = "#1a1a2e"
title_font: str = "Helvetica-Bold"
body_font: str = "Helvetica"
# Layout de página
page_size: tuple[float, float] = letter
margin_top: float = 72.0
margin_bottom: float = 72.0
margin_left: float = 72.0
margin_right: float = 72.0
header_height: float = 50.0
footer_height: float = 30.0
# Portada (v0.1.3+)
cover_image_path: Path | None = None
# Footer logo (v0.1.3+)
footer_logo_path: Path | None = None
footer_logo_enabled: bool = True
footer_logo_position: LogoPosition = LogoPosition.BOTTOM_RIGHT
footer_logo_width: float = 40.0
footer_logo_height: float = 20.0
# Fuentes personalizadas (v0.1.3+)
custom_title_font_path: Path | None = None
custom_body_font_path: Path | None = None
# Secciones (v0.1.3+)
sections: list[SectionConfig] = field(default_factory=list)
Parámetros¶
Configuración básica¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
logo_path |
Path \| None |
None |
Logo para el header |
primary_color |
str |
"#1a1a2e" |
Color principal (hex) |
title_font |
str |
"Helvetica-Bold" |
Fuente de títulos |
body_font |
str |
"Helvetica" |
Fuente de cuerpo |
Layout de página¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
page_size |
tuple |
letter |
Tamaño de página |
margin_top |
float |
72.0 |
Margen superior (puntos) |
margin_bottom |
float |
72.0 |
Margen inferior |
margin_left |
float |
72.0 |
Margen izquierdo |
margin_right |
float |
72.0 |
Margen derecho |
header_height |
float |
50.0 |
Altura del header |
footer_height |
float |
30.0 |
Altura del footer |
Portada v0.1.3¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
cover_image_path |
Path \| None |
None |
Imagen de portada |
Footer logo v0.1.3¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
footer_logo_path |
Path \| None |
None |
Logo personalizado |
footer_logo_enabled |
bool |
True |
Activar logo |
footer_logo_position |
LogoPosition |
BOTTOM_RIGHT |
Posición |
footer_logo_width |
float |
40.0 |
Ancho (puntos) |
footer_logo_height |
float |
20.0 |
Alto (puntos) |
Fuentes personalizadas v0.1.3¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
custom_title_font_path |
Path \| None |
None |
Fuente TTF/OTF títulos |
custom_body_font_path |
Path \| None |
None |
Fuente TTF/OTF cuerpo |
Secciones v0.1.3¶
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
sections |
list[SectionConfig] |
[] |
Lista de secciones |
Propiedades¶
primary_color_obj¶
Retorna el color primario como objeto ReportLab Color.
page_width / page_height¶
Dimensiones de la página en puntos.
content_width / content_height¶
Área disponible para contenido (página menos márgenes).
Métodos¶
get_footer_logo_path() v0.1.3¶
Retorna la ruta al logo del footer (personalizado o default).
register_custom_fonts() v0.1.3¶
Registra fuentes personalizadas y retorna los nombres a usar.
draw_header() / draw_footer()¶
def draw_header(self, canvas: Any, doc: Any) -> None
def draw_footer(self, canvas: Any, doc: Any) -> None
Dibuja header/footer en el canvas. Puede sobrescribirse.
set_header_callback() / set_footer_callback()¶
def set_header_callback(self, callback: Callable) -> None
def set_footer_callback(self, callback: Callable) -> None
Establece callbacks personalizados para header/footer.
Templates predefinidos¶
from qry_doc import (
DEFAULT_TEMPLATE, # Estilo profesional estándar
CORPORATE_TEMPLATE, # Azul corporativo
MINIMAL_TEMPLATE, # Minimalista
A4_TEMPLATE, # Tamaño A4
)
Ejemplos¶
Template básico¶
Template completo v0.1.3¶
from pathlib import Path
from qry_doc import (
ReportTemplate,
LogoPosition,
SectionType,
SectionConfig,
)
template = ReportTemplate(
# Portada
cover_image_path=Path("portada.png"),
# Footer logo
footer_logo_path=Path("mi_logo.png"),
footer_logo_position=LogoPosition.BOTTOM_RIGHT,
footer_logo_width=50.0,
# Fuentes
custom_title_font_path=Path("fonts/Montserrat-Bold.ttf"),
custom_body_font_path=Path("fonts/OpenSans-Regular.ttf"),
# Secciones
sections=[
SectionConfig(SectionType.COVER),
SectionConfig(SectionType.SUMMARY),
SectionConfig(SectionType.DATA),
],
# Colores
primary_color="#1a1a2e",
)