【问题标题】:Reportlab - Truncating text after specific width while writing on canvasReportlab - 在画布上书写时在特定宽度后截断文本
【发布时间】:2019-11-13 13:35:56
【问题描述】:

我正在开发一个项目,该项目具有我们内置的 Angular 的 PDF 编辑器。用户可以在 PDF 上拖放动态字段(用户定义的字段)。当这些字段从用户定义的表单中填写时,相应的 PDF(用户已编辑)会在后端生成。我们正在使用 Python 3.7 和 Reportlab 编辑动态数据并将其写入 PDF。

值动态字段的长度不固定。它可以超过字段变量的长度。在 PDF 编辑器上,用户决定生成的动态文本的最大宽度。我们只想将文本写入指定宽度并截断其余文本。例如,first_name 是放在 PDF 编辑器上的变量。它的最大宽度设置为 10px。如果变量的值为“Wolfeschlegelsteinhausenbergerdorff”,则文本应写到 10 px,之后应被截断。

到目前为止,我们已经成功编写了全文(与指定的宽度无关)。以下是我们正在使用的代码。

........
paragraph_style.textColor = HexColor(pdf_element["font_color"])
paragraph_style.fontSize = pdf_element["font_size"]
paragraph = Paragraph(str(output_text_value), style=paragraph_style)
paragraph.drawOn(can,location_x, location_y)
........

以上代码在 PDF 上写入全文。但是,我们需要一种方法来以某种方式截断指定宽度后的文本。

非常感谢任何帮助。

【问题讨论】:

    标签: python-3.x reportlab platypus


    【解决方案1】:

    不要直接在画布上绘制段落,而是使用框架。在框架内添加段落,将截断模式应用于框架,然后在画布上绘制框架。您的代码应如下所示:

    frame = KeepInFrame(min_width, min_height, [paragraph], mode='truncate')
    frame.width = float(min_.replace("px",""))
    frame.drawOn(can, location_x, location_y)
    

    希望对您有所帮助。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多