assemblerpdf 1.0.6__tar.gz → 1.0.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {assemblerpdf-1.0.6/src/assemblerpdf.egg-info → assemblerpdf-1.0.7}/PKG-INFO +1 -1
  2. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/pyproject.toml +1 -1
  3. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/assemblers/base.py +41 -1
  4. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/style.html +92 -11
  5. assemblerpdf-1.0.7/src/assemblerpdf/templates/assemblerpdf/layout/table.html +33 -0
  6. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7/src/assemblerpdf.egg-info}/PKG-INFO +1 -1
  7. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf.egg-info/SOURCES.txt +1 -0
  8. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/MANIFEST.in +0 -0
  9. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/README.md +0 -0
  10. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/setup.cfg +0 -0
  11. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/__init__.py +0 -0
  12. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/assemblers/__init__.py +0 -0
  13. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/assemblers/form.py +0 -0
  14. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/assemblers/report.py +0 -0
  15. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/core.py +0 -0
  16. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/fonts/Inter-Bold.ttf +0 -0
  17. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/fonts/Inter-Medium.ttf +0 -0
  18. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/fonts/Inter-Regular.ttf +0 -0
  19. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/img/Logo-unp-rojo.png +0 -0
  20. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/img/logo-mininterior-rojo.jpg +0 -0
  21. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/checkbox.html +0 -0
  22. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/field_input.html +0 -0
  23. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/field_label.html +0 -0
  24. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/input.html +0 -0
  25. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/radio.html +0 -0
  26. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/fields/textarea.html +0 -0
  27. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/footer.html +0 -0
  28. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/footer_fixed.html +0 -0
  29. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/grid_row.html +0 -0
  30. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/header.html +0 -0
  31. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/layout/section.html +0 -0
  32. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/assemblerpdf/misc/signature.html +0 -0
  33. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/anexos.html +0 -0
  34. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/anexos_limpio.html +0 -0
  35. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/archivese.html +0 -0
  36. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/autoriza_envio.html +0 -0
  37. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/checkbox.html +0 -0
  38. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/control_cambios.html +0 -0
  39. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/datos_basicosinf.html +0 -0
  40. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/datos_ot.html +0 -0
  41. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/encaso_de.html +0 -0
  42. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fiila_dos_check.html +0 -0
  43. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_cinco_zona.html +0 -0
  44. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_cuatro.html +0 -0
  45. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_cuatro_si_no.html +0 -0
  46. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_cuatro_zona.html +0 -0
  47. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_dos.html +0 -0
  48. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_dos_zona.html +0 -0
  49. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_instructivo.html +0 -0
  50. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_tres.html +0 -0
  51. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_tres_checkbox.html +0 -0
  52. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_tres_zona.html +0 -0
  53. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/fila_uno.html +0 -0
  54. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/firma.html +0 -0
  55. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/firma_doble.html +0 -0
  56. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/firmaop2.html +0 -0
  57. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/firmas_oficializacion.html +0 -0
  58. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/hechos_sobrevinientes.html +0 -0
  59. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/hechos_sobrevinientes_vacio.html +0 -0
  60. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/iformfilacuatro.html +0 -0
  61. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/informacion_doble.html +0 -0
  62. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/input_2checks.html +0 -0
  63. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/input_check.html +0 -0
  64. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/input_checkbox.html +0 -0
  65. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/input_solitario.html +0 -0
  66. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/label_input_dos.html +0 -0
  67. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/leyenda_autoriza_correo.html +0 -0
  68. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/leyenda_superiol.html +0 -0
  69. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/logos.html +0 -0
  70. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/manifiesto.html +0 -0
  71. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/notificacion_correo.html +0 -0
  72. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/oficializacion.html +0 -0
  73. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/pregunta_si_no.html +0 -0
  74. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/pregunta_tresopciones.html +0 -0
  75. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/qr_oficializacion.html +0 -0
  76. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/situacion_amenaza.html +0 -0
  77. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/style.html +0 -0
  78. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/subtitulo_icono.html +0 -0
  79. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/subtitulo_icono_largo.html +0 -0
  80. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tabla_doble.html +0 -0
  81. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tabla_instructivo.html +0 -0
  82. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tabla_matriz_riesgo.html +0 -0
  83. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tabla_proyeccion.html +0 -0
  84. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tabla_simple.html +0 -0
  85. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/texarea.html +0 -0
  86. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tipo_identificacion.html +0 -0
  87. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/tipos_checkbox.html +0 -0
  88. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/titulo.html +0 -0
  89. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/titulo_logo.html +0 -0
  90. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/templates/sistema/titulo_principal.html +0 -0
  91. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/utils/__init__.py +0 -0
  92. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf/utils/template_loader.py +0 -0
  93. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf.egg-info/dependency_links.txt +0 -0
  94. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf.egg-info/requires.txt +0 -0
  95. {assemblerpdf-1.0.6 → assemblerpdf-1.0.7}/src/assemblerpdf.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblerpdf
3
- Version: 1.0.6
3
+ Version: 1.0.7
4
4
  Summary: Generador de PDFs usando WeasyPrint, diseñado para formularios y reportes con componentes genéricos.
5
5
  Author-email: EcosistemaUNP <ecosistema@unp.gov.co>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "assemblerpdf"
7
- version = "1.0.6"
7
+ version = "1.0.7"
8
8
  description = "Generador de PDFs usando WeasyPrint, diseñado para formularios y reportes con componentes genéricos."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -2,7 +2,7 @@ import os
2
2
  from assemblerpdf.core import generate_pdf_from_string
3
3
 
4
4
  class BaseFormAssembler:
5
- def __init__(self, context=None, codigo=None, fecha=None, version=None, auto_decorations=True, custom_css_path=None, custom_css_content=None, pdf_forms=False):
5
+ def __init__(self, context=None, codigo=None, fecha=None, version=None, auto_decorations=True, custom_css_path=None, custom_css_content=None, pdf_forms=False, margin_top=None, margin_bottom=None, margin_left=None, margin_right=None, padding_top=None, padding_bottom=None, padding_left=None, padding_right=None):
6
6
  self.context = context or {}
7
7
  self.components = []
8
8
  self.codigo = codigo
@@ -12,6 +12,14 @@ class BaseFormAssembler:
12
12
  self.custom_css_path = custom_css_path
13
13
  self.custom_css_content = custom_css_content
14
14
  self.pdf_forms = pdf_forms
15
+ self.margin_top = margin_top
16
+ self.margin_bottom = margin_bottom
17
+ self.margin_left = margin_left
18
+ self.margin_right = margin_right
19
+ self.padding_top = padding_top
20
+ self.padding_bottom = padding_bottom
21
+ self.padding_left = padding_left
22
+ self.padding_right = padding_right
15
23
 
16
24
  def _get_img_base(self):
17
25
  import assemblerpdf
@@ -31,6 +39,14 @@ class BaseFormAssembler:
31
39
  'version': self.version,
32
40
  'custom_css_path': self.custom_css_path,
33
41
  'custom_css_content': self.custom_css_content,
42
+ 'margin_top': self.margin_top,
43
+ 'margin_bottom': self.margin_bottom,
44
+ 'margin_left': self.margin_left,
45
+ 'margin_right': self.margin_right,
46
+ 'padding_top': self.padding_top,
47
+ 'padding_bottom': self.padding_bottom,
48
+ 'padding_left': self.padding_left,
49
+ 'padding_right': self.padding_right,
34
50
  **self.context,
35
51
  **(extra_context or {}),
36
52
  'disabled': extra_context.get('disabled', False) if extra_context else False,
@@ -89,6 +105,30 @@ class BaseFormAssembler:
89
105
  self.components.append(row_html)
90
106
  return self
91
107
 
108
+ def add_table(self, headers=None, rows=None, titulo=None, class_group=None, style_group=None, extra_context=None):
109
+ """
110
+ Agrega una tabla genérica altamente dinámica y estilizada al documento.
111
+
112
+ Args:
113
+ headers (list): Lista de diccionarios que definen las columnas:
114
+ [{"text": "Col 1", "width": "30%", "align": "left"}, ...]
115
+ rows (list): Lista de diccionarios, cada uno con una lista de celdas:
116
+ [{"cells": [{"content": "Valor 1", "rowspan": 2}, {"content": "Valor 2"}]}]
117
+ titulo (str): Título superior opcional de la tabla.
118
+ class_group (str): Clase CSS adicional para la tabla.
119
+ style_group (str): Estilo inline adicional para la tabla.
120
+ extra_context (dict): Contexto extra
121
+ """
122
+ ctx = {
123
+ 'headers': headers or [],
124
+ 'rows': rows or [],
125
+ 'titulo': titulo,
126
+ 'class_group': class_group,
127
+ 'style_group': style_group,
128
+ **(extra_context or {})
129
+ }
130
+ return self.add_component('table.html', ctx)
131
+
92
132
  def add_raw_html(self, html):
93
133
  """Agrega HTML crudo al documento."""
94
134
  self.components.append(html)
@@ -35,19 +35,22 @@
35
35
  {% if auto_decorations %}
36
36
  @page {
37
37
  size: letter;
38
- margin-top: 1.5cm;
39
- margin-bottom: 2.2cm; /* Espacio reservado para el footer fijo */
40
- margin-left: 1.2cm;
41
- margin-right: 1.2cm;
38
+ margin-top: {{ margin_top|default('1.5cm') }};
39
+ margin-bottom: {{ margin_bottom|default('2.2cm') }}; /* Espacio reservado para el footer fijo */
40
+ margin-left: {{ margin_left|default('1.2cm') }};
41
+ margin-right: {{ margin_right|default('1.2cm') }};
42
42
  border: 1px solid #303d50;
43
43
  border-radius: 5px;
44
- padding: 15px 15px 5px 15px; /* Espacio interno del borde */
44
+ padding-top: {{ padding_top|default('15px') }};
45
+ padding-bottom: {{ padding_bottom|default('5px') }};
46
+ padding-left: {{ padding_left|default('15px') }};
47
+ padding-right: {{ padding_right|default('15px') }};
45
48
  }
46
49
 
47
50
  /* Pie de página fijo de oficialización */
48
51
  .oficializacion-fija {
49
52
  position: fixed;
50
- bottom: -1.7cm; /* Posicionado dentro del margen inferior */
53
+ bottom: calc(-{{ margin_bottom|default('2.2cm') }} + 0.5cm); /* Posicionado dentro del margen inferior */
51
54
  left: 0;
52
55
  width: 100%;
53
56
  z-index: 9999;
@@ -62,16 +65,16 @@
62
65
  }
63
66
 
64
67
  /* Evitar saltos de página huérfanos dentro de grupos compactos */
65
- .signature-container, .form-group, .choice-container {
68
+ .signature-container, .form-group, .choice-container, .grid-row {
66
69
  page-break-inside: avoid;
67
70
  }
68
71
  {% else %}
69
72
  @page {
70
73
  size: letter;
71
- margin-top: 1.5cm;
72
- margin-bottom: 1.5cm;
73
- margin-left: 1cm;
74
- margin-right: 1cm;
74
+ margin-top: {{ margin_top|default('1.5cm') }};
75
+ margin-bottom: {{ margin_bottom|default('1.5cm') }};
76
+ margin-left: {{ margin_left|default('1cm') }};
77
+ margin-right: {{ margin_right|default('1cm') }};
75
78
  }
76
79
  {% endif %}
77
80
 
@@ -159,7 +162,9 @@
159
162
  display: inline-block;
160
163
  vertical-align: middle;
161
164
  margin-right: 16px;
165
+ margin-bottom: 8px;
162
166
  font-size: 11px;
167
+ line-height: 1.6;
163
168
  }
164
169
 
165
170
  .choice-box {
@@ -280,6 +285,39 @@
280
285
  text-transform: uppercase;
281
286
  }
282
287
 
288
+ /* Preset de Título Principal (con fondo azul oscuro y texto blanco) */
289
+ .section-container.main-section-title {
290
+ background-color: #303d50 !important;
291
+ padding: 4px 10px !important;
292
+ border-radius: 4px !important;
293
+ margin-top: 12px !important;
294
+ margin-bottom: 6px !important;
295
+ border-bottom: none !important;
296
+ page-break-after: avoid !important;
297
+ page-break-inside: avoid !important;
298
+ display: block !important;
299
+ }
300
+
301
+ .section-container.main-section-title .section-title {
302
+ color: #ffffff !important;
303
+ font-size: 11px !important;
304
+ }
305
+
306
+ /* Preset de Subtítulo (con icono y espaciado compacto) */
307
+ .section-container.subtitle-section {
308
+ margin-top: 8px !important;
309
+ margin-bottom: 4px !important;
310
+ border-bottom: 1px solid #cbd5e1 !important;
311
+ padding-bottom: 4px !important;
312
+ page-break-after: avoid !important;
313
+ page-break-inside: avoid !important;
314
+ }
315
+
316
+ .section-container.subtitle-section .section-title {
317
+ color: #303d50 !important;
318
+ font-size: 10px !important;
319
+ }
320
+
283
321
  /* ✍️ Firma */
284
322
  .signature-container {
285
323
  display: flex;
@@ -342,6 +380,49 @@
342
380
  width: 20%;
343
381
  }
344
382
 
383
+ /* 📊 Tabla Genérica */
384
+ .table-container {
385
+ width: 100%;
386
+ margin-top: 10px;
387
+ margin-bottom: 10px;
388
+ }
389
+
390
+ .table-title-bar {
391
+ background-color: #303d50;
392
+ padding: 6px 12px;
393
+ border-radius: 4px 4px 0 0;
394
+ }
395
+
396
+ .assembler-table {
397
+ width: 100%;
398
+ border-collapse: collapse;
399
+ border: 1px solid #cbd5e1;
400
+ font-family: 'Inter', sans-serif;
401
+ font-size: 9.5px;
402
+ background-color: #ffffff;
403
+ }
404
+
405
+ .assembler-table th {
406
+ padding: 6px 10px;
407
+ font-weight: bold;
408
+ border: 1px solid #475569;
409
+ background-color: #303d50;
410
+ color: #ffffff;
411
+ font-size: 9.5px;
412
+ }
413
+
414
+ .assembler-table td {
415
+ padding: 6px 10px;
416
+ border: 1px solid #cbd5e1;
417
+ vertical-align: top;
418
+ font-size: 9.5px;
419
+ color: #334155;
420
+ }
421
+
422
+ .assembler-table tr {
423
+ page-break-inside: avoid;
424
+ }
425
+
345
426
  /* Saltos de Página */
346
427
  .page-break {
347
428
  page-break-before: always;
@@ -0,0 +1,33 @@
1
+ <div class="table-container {{ class_group|default('') }}" style="margin-top: {{ margin_top|default('10px') }}; margin-bottom: {{ margin_bottom|default('10px') }}; {{ style_group|default('') }}">
2
+ {% if titulo %}
3
+ <div class="table-title-bar" style="background-color: #303d50; padding: 6px 12px; border-radius: 4px 4px 0 0;">
4
+ <span style="font-size: 11px; font-weight: bold; color: #ffffff; text-transform: uppercase;">{{ titulo }}</span>
5
+ </div>
6
+ {% endif %}
7
+ <table class="assembler-table" style="width: 100%; border-collapse: collapse; border: 1px solid #cbd5e1; font-family: 'Inter', sans-serif; font-size: 9.5px; {% if titulo %}border-top: none; border-radius: 0 0 4px 4px;{% else %}border-radius: 4px;{% endif %} overflow: hidden;">
8
+ {% if headers %}
9
+ <thead>
10
+ <tr style="background-color: #303d50; color: #ffffff;">
11
+ {% for h in headers %}
12
+ <th style="padding: 6px 10px; font-weight: bold; text-align: {{ h.align|default('left') }}; font-size: 9.5px; border: 1px solid #cbd5e1; {% if h.width %}width: {{ h.width }};{% endif %} {{ h.style|default('') }}" {% if h.colspan %}colspan="{{ h.colspan }}"{% endif %} {% if h.rowspan %}rowspan="{{ h.rowspan }}"{% endif %}>
13
+ {{ h.text }}
14
+ </th>
15
+ {% endfor %}
16
+ </tr>
17
+ </thead>
18
+ {% endif %}
19
+ <tbody>
20
+ {% for row in rows %}
21
+ <tr style="{{ row.style|default('') }}">
22
+ {% for cell in row.cells %}
23
+ <td style="padding: 6px 10px; border: 1px solid #cbd5e1; vertical-align: top; text-align: {{ cell.align|default('left') }}; {{ cell.style|default('') }}"
24
+ {% if cell.rowspan %}rowspan="{{ cell.rowspan }}"{% endif %}
25
+ {% if cell.colspan %}colspan="{{ cell.colspan }}"{% endif %}>
26
+ {{ cell.content|safe }}
27
+ </td>
28
+ {% endfor %}
29
+ </tr>
30
+ {% endfor %}
31
+ </tbody>
32
+ </table>
33
+ </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblerpdf
3
- Version: 1.0.6
3
+ Version: 1.0.7
4
4
  Summary: Generador de PDFs usando WeasyPrint, diseñado para formularios y reportes con componentes genéricos.
5
5
  Author-email: EcosistemaUNP <ecosistema@unp.gov.co>
6
6
  License: MIT
@@ -29,6 +29,7 @@ src/assemblerpdf/templates/assemblerpdf/layout/grid_row.html
29
29
  src/assemblerpdf/templates/assemblerpdf/layout/header.html
30
30
  src/assemblerpdf/templates/assemblerpdf/layout/section.html
31
31
  src/assemblerpdf/templates/assemblerpdf/layout/style.html
32
+ src/assemblerpdf/templates/assemblerpdf/layout/table.html
32
33
  src/assemblerpdf/templates/assemblerpdf/misc/signature.html
33
34
  src/assemblerpdf/templates/sistema/anexos.html
34
35
  src/assemblerpdf/templates/sistema/anexos_limpio.html
File without changes
File without changes
File without changes