Bernd Wurst commited on 2008-04-15 18:42:01
Zeige 1 geänderte Dateien mit 33 Einfügungen und 2 Löschungen.
... | ... |
@@ -53,6 +53,34 @@ def _splitToWidth(canvas, text, width, font, size): |
53 | 53 |
return lines |
54 | 54 |
|
55 | 55 |
|
56 |
+def _drawJustifiedString(x, y, text, canvas, width, font, size): |
|
57 |
+ text = text.strip() |
|
58 |
+ if canvas.stringWidth(text, font, size) > width: |
|
59 |
+ canvas.drawString(x, y, text) |
|
60 |
+ # too long line, I cannot handle this |
|
61 |
+ return |
|
62 |
+ if not ' ' in text: |
|
63 |
+ canvas.drawString(x, y, text) |
|
64 |
+ # no space in there, nothing to justify |
|
65 |
+ return |
|
66 |
+ |
|
67 |
+ words = [ '%s' % w for w in text.split(' ')] |
|
68 |
+ words_width = 0.0 |
|
69 |
+ for word in words: |
|
70 |
+ words_width += canvas.stringWidth(word, font, size) |
|
71 |
+ |
|
72 |
+ available_space = width - words_width |
|
73 |
+ available_each = available_space / float((len(words) - 1)) |
|
74 |
+ from pprint import pprint |
|
75 |
+ pprint( (width, words_width)) |
|
76 |
+ |
|
77 |
+ my_x = x |
|
78 |
+ for idx in range(len(words)): |
|
79 |
+ word = words[idx] |
|
80 |
+ canvas.drawString(my_x, y, word) |
|
81 |
+ my_x += canvas.stringWidth(word, font, size) + available_each |
|
82 |
+ return |
|
83 |
+ |
|
56 | 84 |
|
57 | 85 |
def _PageWrap(canvas): |
58 | 86 |
'''Seitenumbruch''' |
... | ... |
@@ -337,9 +365,12 @@ def InvoiceToPDF(iv): |
337 | 365 |
y -= line_height + 1 |
338 | 366 |
y -= line_padding |
339 | 367 |
canvas.setFont(font, my_font_size) |
340 |
- for line in lines: |
|
341 |
- canvas.drawString(left, y-font_height, line) |
|
368 |
+ for line in lines[:-1]: |
|
369 |
+ _drawJustifiedString(left, y-font_height, line, canvas, right-left, font, my_font_size) |
|
370 |
+ y -= line_height |
|
371 |
+ canvas.drawString(left, y-font_height, lines[-1]) |
|
342 | 372 |
y -= line_height |
373 |
+ |
|
343 | 374 |
y -= line_padding*3 |
344 | 375 |
left, right = leftcontent, rightcontent |
345 | 376 |
else: |
346 | 377 |