2016-09-21 65 views
1

我有一個Table 2細胞,每一個裏面有一個Paragraph溢出隱藏在一個段落在ReportLab的

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 
    ) 

我需要隱藏段落的溢出內容,但段落,而不是隱藏溢出內容做一個斷線。

回答

2

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) 
+0

完美的作品。我有一個問題,我怎麼能'para_fragment.kind'與'0'不同? @ B8vrede –

+0

添加內聯分頁符將導致它變得友善1 :) – B8vrede

+0

「添加內聯分頁符」像\ n? :d –