Bernd Wurst commited on 2023-11-15 15:12:55
Zeige 3 geänderte Dateien mit 26 Einfügungen und 2 Löschungen.
... | ... |
@@ -3,6 +3,14 @@ |
3 | 3 |
import datetime |
4 | 4 |
|
5 | 5 |
|
6 |
+class Image: |
|
7 |
+ def __init__(self, pilimage, caption=None, dpi=80, alignment="left"): |
|
8 |
+ self.imagedata = pilimage |
|
9 |
+ self.alignment = alignment |
|
10 |
+ self.dpi = dpi |
|
11 |
+ self.caption = caption |
|
12 |
+ |
|
13 |
+ |
|
6 | 14 |
class Text: |
7 | 15 |
def __init__(self, content, urgent=False, headline=None): |
8 | 16 |
self.paragraphs = [content] |
... | ... |
@@ -10,7 +10,7 @@ from .metrics import * |
10 | 10 |
from .custom_elements import basicPage, firstPage, address_header |
11 | 11 |
|
12 | 12 |
# reportlab imports |
13 |
-from reportlab.lib.units import cm |
|
13 |
+from reportlab.lib.units import cm, inch |
|
14 | 14 |
from reportlab.pdfgen import canvas as Canvas |
15 | 15 |
from reportlab.lib.colors import Color |
16 | 16 |
|
... | ... |
@@ -475,6 +475,19 @@ def InvoiceToPDF(iv, bankdata=True): |
475 | 475 |
|
476 | 476 |
y -= line_padding * 3 |
477 | 477 |
left, right = leftcontent, rightcontent |
478 |
+ elif type(part) == Invoice.Image: |
|
479 |
+ width = (part.imagedata.width / part.dpi) * inch |
|
480 |
+ height = width * (part.imagedata.height / part.imagedata.width) |
|
481 |
+ x = leftcontent |
|
482 |
+ if part.alignment == "center": |
|
483 |
+ x = leftcontent + (rightcontent - leftcontent)/2 - width/2 |
|
484 |
+ elif part.alignment == "right": |
|
485 |
+ x = rightcontent - width |
|
486 |
+ canvas.drawInlineImage(part.imagedata, x, y-height, width=width, height=height) |
|
487 |
+ y -= line_padding + height |
|
488 |
+ if part.caption: |
|
489 |
+ canvas.drawString(x, y-font_height, part.caption) |
|
490 |
+ y -= line_height |
|
478 | 491 |
else: |
479 | 492 |
raise NotImplementedError("Cannot handle part of type %s" % type(part)) |
480 | 493 |
y -= (0.5 * cm) |
... | ... |
@@ -1,7 +1,7 @@ |
1 | 1 |
# -* coding: utf8 *- |
2 | 2 |
|
3 | 3 |
from __future__ import division |
4 |
-from Invoice import Text, Table |
|
4 |
+from Invoice import Text, Table, Image |
|
5 | 5 |
from utils import format_price, split_to_width |
6 | 6 |
|
7 | 7 |
|
... | ... |
@@ -35,6 +35,9 @@ def InvoiceToText(iv, bankdata=True): |
35 | 35 |
ret.append(InvoiceTableToText(part)) |
36 | 36 |
elif type(part) == Text: |
37 | 37 |
ret.append(InvoiceTextToText(part)) |
38 |
+ elif type(part) == Image: |
|
39 |
+ # ignore images |
|
40 |
+ pass |
|
38 | 41 |
else: |
39 | 42 |
raise NotImplementedError("Cannot handle part of type %s" % type(part)) |
40 | 43 |
|
41 | 44 |