2013-10-15 70 views
0

我想指示Prawn截断表格单元格的内容而不是包装它们。如何指定大虾截断表格单元格内容?

我已经尝试设置样式如下,但它没有任何效果:

options = { 
    cell_style: { 
    overflow: :truncate 
    }, 
} 
pdf.table(entries, options) 

如果没有指定截断没有直接的方法,我需要一个解决办法配方。

请考虑以下几点:

  • 我不能截断字符串本身,因为字体是不固定的宽度
  • 计算每个字符串的宽度是可以接受的,但我也需要一个方式来检索列宽。

回答

2

可以使用固定高度,但只有在文本高度固定的情况下才可以使用。只有文本的第一行将被打印。

实施例:

pdf.table(entries, :cell_style => {:height => 25}) 

另一种选择是使用定制包装。详情请看这里:

https://github.com/prawnpdf/prawn/blob/master/lib/prawn/text/formatted/box.rb#L149

例子:

module MyWrap 
    def wrap(array) 
    initialize_wrap(array) 
    @line_wrap.wrap_line(:document => @document, 
            :kerning => @kerning, 
            :width => available_width, 
            :arranger => @arranger) 
    if enough_height_for_this_line? 
     move_baseline_down 
     print_line 
    end 
    @text = @printed_lines.join("\n") 
    @everything_printed = @arranger.finished? 
    @arranger.unconsumed 
    end 
end 

Prawn::Text::Formatted::Box.extensions << MyWrap 

entries = [ ["very long text here", "another very long text here"] ] 

Prawn::Document.generate("test.pdf") do 
    table entries, :cell_style => { :inline_format => true } 
end 

我只是复制原始wrap方法和删除while循环,以只打印文本的第一行。

请注意,必须使用:inline_format => true才能使Prawn::Text::Formatted::Box正常工作。

相关问题