Compare commits

...

2 Commits

Author SHA1 Message Date
Torsten Ueberschar
dd74245c64 fix visual position grouping 2024-02-19 10:48:55 +01:00
Torsten Ueberschar
b669e065f5 take fonts path from path to template 2024-02-19 10:34:13 +01:00
4 changed files with 22 additions and 12 deletions

View File

@@ -13,6 +13,7 @@ class HtmlTemplate:
if not Path(templates).exists(): if not Path(templates).exists():
raise FileNotFoundError(f'Inivalid path to template files: {templates}') raise FileNotFoundError(f'Inivalid path to template files: {templates}')
self.templates = templates self.templates = templates
self.path_to_template = Path(templates)
def prepare_template(self, invoice_data, envelope_data): def prepare_template(self, invoice_data, envelope_data):
try: try:
@@ -53,15 +54,14 @@ class HtmlTemplate:
html_content = markdown.markdown(md_content) html_content = markdown.markdown(md_content)
return html_content return html_content
@staticmethod def convert_html_to_pdf(self, source_html, output_filename):
def convert_html_to_pdf(source_html, output_filename):
# open output file for writing (truncated binary) # open output file for writing (truncated binary)
result_file = open(output_filename, "w+b") result_file = open(output_filename, "w+b")
# convert HTML to PDF # convert HTML to PDF
pisa_status = pisa.CreatePDF( pisa_status = pisa.CreatePDF(
source_html, # the HTML to convert source_html, # the HTML to convert
path='test_data/templates/fonts', path=str(self.path_to_template / 'fonts'),
dest=result_file dest=result_file
) # file handle to recieve result ) # file handle to recieve result

View File

@@ -135,7 +135,7 @@ def main():
print('Generating invoice...') print('Generating invoice...')
invoice_pdf = Path(invoice_data.Id).with_suffix('.pdf') invoice_pdf = Path(invoice_data.Id).with_suffix('.pdf')
print(f'Invoice PDF: {invoice_pdf}') print(f'Invoice PDF: {invoice_pdf}')
html_generator.HtmlTemplate.convert_html_to_pdf(template, invoice_pdf) generator.convert_html_to_pdf(template, invoice_pdf)
except Exception as e: except Exception as e:
print(f'Error: {e}') print(f'Error: {e}')
return return

View File

@@ -9,7 +9,6 @@ Positions:
Quantity: 100 Quantity: 100
- Title: "Aschlecken" - Title: "Aschlecken"
SubTitle: "Leistungszeitraum: 11/2022"
PricePerUnit: 99.99 PricePerUnit: 99.99
Quantity: 12 Quantity: 12

View File

@@ -83,8 +83,8 @@
} }
.positionen { .positionen {
padding-top: 1mm; padding-top: 1pt;
padding-bottom: 1mm; padding-bottom: 1pt;
} }
.links { .links {
@@ -134,6 +134,14 @@
margin-left: -.55cm; margin-left: -.55cm;
} }
.position_top {
padding-top: 1pt;
}
.position_bottom {
padding-bottom: 1pt;
}
</style> </style>
</head> </head>
@@ -180,15 +188,18 @@
<th class="rechts" style="width: 15%">Betrag</th> <th class="rechts" style="width: 15%">Betrag</th>
</tr> </tr>
{% for position in invoice.Positions %} {% for position in invoice.Positions %}
<tr class="positionen"> <tr>
<td class="links">{{ position.Title }}<br><span class="small">{{ position.SubTitle }}</span></td> <td class="links position_top">{{ position.Title }}</td>
<td class="rechts">{{ format_float(position.Quantity | float) }}</td> <td class="rechts" rowspan="2">{{ format_float(position.Quantity | float) }}</td>
<td class="rechts">{{ format_float((position.PricePerUnit or invoice.PricePerUnit) | float) }} <td class="rechts" rowspan="2">{{ format_float((position.PricePerUnit or invoice.PricePerUnit) | float) }}
</td> </td>
<td class="rechts">{{ format_float(position.Quantity * ( position.PricePerUnit or <td class="rechts" rowspan="2">{{ format_float(position.Quantity * ( position.PricePerUnit or
invoice.PricePerUnit ))}} invoice.PricePerUnit ))}}
</td> </td>
</tr> </tr>
<tr>
<td class="links small position_bottom">{{ position.SubTitle }}</td>
</tr>
{% endfor %} {% endfor %}
<tr class="summe"> <tr class="summe">
<td></td> <td></td>