如何指定prawn截断表格单元格内容?

时间:2013-10-15 09:33:56

标签: ruby pdf-generation prawn

我想指示Prawn截断表格单元格的内容而不是包裹它们。

我已尝试按如下方式设置样式,但它没有效果:

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

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

请考虑以下事项:

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

2 个答案:

答案 0 :(得分: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正常工作。

答案 1 :(得分:0)

http://prawn.majesticseacreature.com/docs/0.11.1/Prawn/Text/Formatted.html

有一种方法可以在

的框中截断文本
formatted_text_box(array, options={})

但它不是一张桌子。我不认为有任何方法可以使用表格,你必须使用文本框。