喂,
我正在使用报告实验室生成pdf。我想要画一个文本,它是一个Paragraph,代表一个标题,所以,如果标题比段落的可用长度长,那么它将在下一行拆分,如果标题长到适合段落的可用宽度和高度,那么文本将被调整大小。
它工作正常,字体为10,但是,如果我选择一个字体更大的样式,比如:
title_style = ParagraphStyle("title", fontName='Helvetica', fontSize=50, alignment=TA_CENTER, backColor=None)比下面的图片所画的文字更多的文字是重叠的:

这是我的代码:
def draw_on(canvas, x, y, paragraph, style, text, available_width, available_height, min_font_size=8):
w, h = paragraph.wrap(available_width, available_height)
temp_font_size = paragraph.style.fontSize
while temp_font_size > min_font_size:
if w <= available_width and h <= available_height:
paragraph.drawOn(canvas, x, y)
break
else:
temp_font_size -= 1
style.fontSize = temp_font_size
paragraph = Paragraph(text, style)
w, h = paragraph.wrap(available_width, available_height)
def generate_pdf():
c = canvas.Canvas("FirstPage.pdf")
title_style = ParagraphStyle("title", fontName='Helvetica', fontSize=10, alignment=TA_CENTER, backColor=None)
title_text = 'If title has a small font, everything s ok.'
title_paragraph = Paragraph(title_text, title_style)
title_paragraph_available_width = 2*inch
title_paragraph_available_height = 1*inch
title_min_font_size = 8
draw_on(c, 2*inch, 5*inch, title_paragraph, title_style, title_text, title_paragraph_available_width,
title_paragraph_available_height, title_min_font_size)
c.showPage()
c.save()任何人都有一个ideea,为什么会发生这种情况,以及如何解决这个问题?
发布于 2014-02-24 12:44:37
用户指南第67页对此作了说明:
fontSize和fontName标记是显而易见的,但是设置前导是很重要的。这是相邻的文本行之间的间距;一个好的经验法则是使这20%比点的大小大。
因此,在您的情况下,您需要将leading = 50 * 1.2添加到ParagraphStyle中。
另外,作为附带说明,我建议你要么充分利用reportlabs (Paragraph's等)的潜力,要么坚持使用reportlabs,它更基本,更易于编码。鸭嘴兽更适合更长的文本和相对位置(比如乳胶),pdfgen更适合绝对定位(word)。但这只是我的观点。
https://stackoverflow.com/questions/21753218
复制相似问题