如何在 Reportlab/tkinter/Python 脚本中打印地址行上的多个项目?

问题描述 投票:0回答:1

如何在reportlab/tkinter/python 中的一个标签上打印多行?例如,下面在两个不同的标签上打印“Hello”和“World”(附有屏幕截图)。我希望能够在同一个标签上打印“Hello”和“World”,以及它们下面的其他项目,如下所示:

世界你好

明天

周三

我尝试在同一行中添加(sheet.add_label(“Hello”,“World”),但收到附加错误。任何和所有帮助,想法,评论表示赞赏。下面的示例工作脚本:

import labels
from reportlab.graphics import shapes

specs = labels.Specification(210, 297, 2, 8, 90, 25, corner_radius=2)

def draw_label(label, width, height, obj):
    label.add(shapes.String(2, 2, str(obj), fontName="Helvetica", fontSize=40))


sheet = labels.Sheet(specs, draw_label, border=True)

sheet.add_label("Hello")
sheet.add_label("World")


sheet.save('basic.pdf')
print("{0:d} label(s) output on {1:d} page(s).".format(sheet.label_count, sheet.page_count))

New Line example

Error Message

Original Script Output

python reportlab
1个回答
0
投票

这个问题似乎自 2017 年以来就存在。

长字符串不会换行·问题#15·bcbnz/pylabels

但是您可以修改

draw_label
来获取行列表,并在
label.add()
 中使用两个具有不同位置的 
String()

def draw_label(label, width, height, lines):
    #print('lines:', lines)
    label.add(shapes.String(2, 20,  lines[0], fontName="Helvetica", fontSize=20))
    label.add(shapes.String(2, 2, lines[1], fontName="Helvetica", fontSize=20))

sheet = labels.Sheet(specs, draw_label, border=True)

sheet.add_label(["Hello","World"])

您可以使用具有其他值的列表使其变得更加复杂

def draw_label(label, width, height, lines):
    for x, y, text in lines:
        label.add(shapes.String(x, y, text, fontName="Helvetica", fontSize=20))

sheet = labels.Sheet(specs, draw_label, border=True)

# [ (x, y, text), (x, y, text) ]
sheet.add_label([ (2, 40, "Hello"), (2, 20, "World"), (2, 2, "Python") ])


完整的工作代码

import labels
from reportlab.graphics import shapes

specs = labels.Specification(210, 297, 2, 8, 90, 25, corner_radius=2)

def draw_label(label, width, height, lines):
    for x, y, text in lines:
        label.add(shapes.String(x, y, text, fontName="Helvetica", fontSize=20))

sheet = labels.Sheet(specs, draw_label, border=True)

# [ (x, y, text), (x, y, text), ... ]
sheet.add_label([ (2, 40, "Hello"), (2, 20, "World"), (2, 2, "Python") ])
sheet.add_label([ (2, 40, "Other"), (2, 20, "Label") ])

sheet.save('basic.pdf')

print("{0:d} label(s) output on {1:d} page(s).".format(sheet.label_count, sheet.page_count))

© www.soinside.com 2019 - 2024. All rights reserved.