如何在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))
这个问题似乎自 2017 年以来就存在。
但是您可以修改
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))