Reportlab - 在 canvas 上书写时在特定宽度后截断文本

Reportlab - Truncating text after specific width while writing on canvas

我正在开发一个项目,其中包含我们内置的 PDF 编辑器 angular。用户可以在 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 上写入全文。但是,我们需要一种方法以某种方式在指定宽度后截断文本。

非常感谢任何帮助。

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

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

希望对您有所帮助。谢谢