在Reportlab中隐藏在段落上的溢出

2024-04-25 21:00:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Table有两个细胞,每个细胞里面都有一个Paragraph

from reportlab.platypus import Paragraph, Table, TableStyle
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm

table_style_footer = TableStyle(
            [
                ('LEFTPADDING', (0, 0), (-1, -1), 0),
                ('RIGHTPADDING', (0, 0), (-1, -1), 0),
                ('TOPPADDING', (0, 0), (-1, -1), 0),
                ('BOTTOMPADDING', (0, 0), (-1, -1), 0),
                ('BOX', (0, 0), (-1, -1), 1, (0, 0, 0)),
                ('VALIGN', (0, 0), (-1, -1), 'TOP'),
            ]
        )

style_p_footer = ParagraphStyle('Normal')
style_p_footer.fontName = 'Arial'
style_p_footer.fontSize = 8
style_p_footer.leading = 10

Table([
       [
        Paragraph('Send To:', style_p_footer), 
        Paragraph('Here should be a variable with long content', style_p_footer)
       ]
      ],
      [1.7 * cm, 4.8 * cm],
      style=table_style_footer
     )

我需要隐藏段落的溢出内容,但是段落而不是隐藏溢出内容做了一个换行符。在


Tags: fromimport内容stylelibtablecm细胞
1条回答
网友
1楼 · 发布于 2024-04-25 21:00:33

Reportlab似乎不支持隐藏溢出,但是我们可以通过使用ParagraphbreakLines函数来实现它。breakLines函数返回一个对象,该对象包含给定宽度的段落的所有行,因此我们也可以使用它来查找第一行并丢弃其他所有行。在

基本上我们需要做的是:

  1. 创建虚拟段落
  2. 取出假人的线条
  3. 根据假人的第一行创建实际段落

在代码中执行此操作如下所示:

# Create a dummy paragraph to see how it would split
long_string = 'Here should be a variable with long content'*10
long_paragraph = Paragraph(long_string, style_p_footer)

# Needed because of a bug in breakLines (value doesn't matter)
long_paragraph.width = 4.8 * cm

# Fetch the lines of the paragraph for the given width
para_fragment = long_paragraph.breakLines(width=4.8 * cm)

# There are 2 kinds of returns so 2 ways to grab the first line
if para_fragment.kind == 0:
    shorted_text = " ".join(para_fragment.lines[0][1])
else:
    shorted_text = " ".join([w.text for w in para_fragment.lines[0].words])

# To make it pretty add ... when we break of the sentence
if len(para_fragment.lines) > 1:
    shorted_text += "..."

# Create the actual paragraph
shorted_paragraph = Paragraph(shorted_text, style_p_footer)

相关问题 更多 >