ReportLab - 重叠词

ser*_*iuz 3 reportlab

嗨,

我正在使用报告实验室生成 pdf。我想绘制一个文本,它是一个Paragraph代表标题的文本,因此,如果标题比段落的可用宽度长,它将在下一行拆分,如果标题太长以适合段落的可用宽度和高度文本将被调整大小。

使用较小的 10 字体可以正常工作,但是,如果我选择具有较大字体的样式,例如:

title_style = ParagraphStyle("title", fontName='Helvetica', fontSize=50, alignment=TA_CENTER, backColor=None)
Run Code Online (Sandbox Code Playgroud)

与下图所示的文本相比,文字是重叠的: 示例图像

这是我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么会发生这种情况以及如何解决这个问题?

Foo*_*chu 5

用户指南的第 67 页对此进行了描述:

fontSize 和 fontName 标签很明显,但设置前导很重要。这是相邻文本行之间的间距;一个好的经验法则是使这比点大小大 20%。

所以在你的情况下,你需要添加leading = 50 * 1.2到你的ParagraphStyle

另外,作为旁注,我建议您要么使用 reportlabs Platypus(Paragraph's 等)的全部潜力,要么坚持使用更基本且易于编码的 reportlabs pdfgen。Platypus 适用于较长的文本和相对定位(想想 Latex),而 pdfgen 更适用于绝对定位(word)。但这只是我的意见...