Bernd Wurst commited on 2024-02-14 18:07:50
Zeige 4 geänderte Dateien mit 23 Einfügungen und 5 Löschungen.
... | ... |
@@ -12,10 +12,11 @@ class InvoiceImage(object): |
12 | 12 |
|
13 | 13 |
|
14 | 14 |
class InvoiceText(object): |
15 |
- def __init__(self, content, urgent=False, headline=None): |
|
15 |
+ def __init__(self, content, urgent=False, headline=None, indent=None): |
|
16 | 16 |
self.paragraphs = [content] |
17 | 17 |
self.urgent = urgent |
18 | 18 |
self.headline = headline |
19 |
+ self.indent = indent |
|
19 | 20 |
self.fontsize = 0 # relative Schriftgröße ggü default |
20 | 21 |
|
21 | 22 |
def addParagraph(self, content): |
... | ... |
@@ -588,6 +588,12 @@ class PDF(object): |
588 | 588 |
my_font_size = font_size + part.fontsize # Relative Schriftgröße beachten |
589 | 589 |
self.canvas.setFont(self.font, my_font_size) |
590 | 590 |
left, right = self.leftcontent, self.rightcontent |
591 |
+ indent = 0 |
|
592 |
+ if part.indent: |
|
593 |
+ if isinstance(part.indent, bool): |
|
594 |
+ indent = 2 * cm |
|
595 |
+ else: |
|
596 |
+ indent = part.indent * cm |
|
591 | 597 |
firsttime = True |
592 | 598 |
headlines = [] |
593 | 599 |
if part.urgent: |
... | ... |
@@ -596,7 +602,7 @@ class PDF(object): |
596 | 602 |
if part.headline: |
597 | 603 |
headlines = self._splitToWidth(part.headline, right - left, self.font, my_font_size) |
598 | 604 |
for para in part.paragraphs: |
599 |
- lines = self._splitToWidth(para, right - left, self.font, my_font_size) |
|
605 |
+ lines = self._splitToWidth(para, right - left - indent, self.font, my_font_size) |
|
600 | 606 |
if part.urgent: |
601 | 607 |
need_height = len(lines) * self._lineHeight(my_font_size) |
602 | 608 |
if len(headlines) > 0: |
... | ... |
@@ -616,7 +622,7 @@ class PDF(object): |
616 | 622 |
self.y -= self.line_padding |
617 | 623 |
self.canvas.setFont(self.font, my_font_size) |
618 | 624 |
for line in lines: |
619 |
- self.canvas.drawString(left, self.y - self.font_height, line) |
|
625 |
+ self.canvas.drawString(left + indent, self.y - self.font_height, line) |
|
620 | 626 |
self.y -= self._lineHeight(my_font_size) |
621 | 627 |
self.y -= self.line_padding * 3 |
622 | 628 |
elif isinstance(part, InvoiceImage): |
... | ... |
@@ -149,8 +149,17 @@ def InvoiceTableToText(invoiceTable: InvoiceTable): |
149 | 149 |
|
150 | 150 |
def InvoiceTextToText(invoiceText: InvoiceText): |
151 | 151 |
ret = [] |
152 |
+ if invoiceText.headline: |
|
153 |
+ for line in split_to_width(invoiceText.headline, 72): |
|
154 |
+ ret.append(line) |
|
155 |
+ indent = 0 |
|
156 |
+ if invoiceText.indent: |
|
157 |
+ if isinstance(invoiceText.indent, bool): |
|
158 |
+ indent = 2 |
|
159 |
+ else: |
|
160 |
+ indent = invoiceText.indent |
|
152 | 161 |
for par in invoiceText.paragraphs: |
153 |
- for s in split_to_width(par, 72): |
|
154 |
- ret.append(s) |
|
162 |
+ for s in split_to_width(par, 72 - indent): |
|
163 |
+ ret.append(' ' * indent + s) |
|
155 | 164 |
ret.append('') |
156 | 165 |
return '\n'.join(ret) |
... | ... |
@@ -156,6 +156,8 @@ if __name__ == '__main__': |
156 | 156 |
text = InvoiceText('Wir danken Ihnen, dass Sie unser Angebot in Anspruch genommen haben und hoffen weiterhin auf eine gute Zusammenarbeit. Dieser Rechnung liegen die Allgemeinen Geschäftsbedingungen zum Zeitpunkt des Rechnungsdatums zugrunde, die Sie unter https://www.schokokeks.org/agb abrufen können.') |
157 | 157 |
invoice.parts.append(text) |
158 | 158 |
|
159 |
+ invoice.parts.append(InvoiceText('Das ist ein eingerückter Absatz mit etwas Text zum Testen der Line-Wrap-Funktion. Er hat auch eine Überschrift, um auch das zu zeigen.', headline='Schlussbemerkung', indent=2)) |
|
160 |
+ |
|
159 | 161 |
textdata = InvoiceToText(invoice) |
160 | 162 |
pdfdata = InvoiceToPDF(invoice) |
161 | 163 |
xmldata = InvoiceToXML(invoice) |
162 | 164 |