ruby-on-rails - Prawn 网格布局: Dynamic content colliding with subsequent rows

标签 ruby-on-rails ruby pdf prawn

我想在 pdf 文档的不同位置指定列。

示例:此部分三列,该部分一列,另一部分两列。

我不希望将行绑定(bind)到 pdf 文档上的物理位置,因为我有各种长度的动态文本,所以我无法预测某个区域内有多少内容。发生的情况是,如果 [column, row] 框的文本太多,它只会溢出到后续行,与那里的文本发生冲突。

看来 prawn 中的布局网格强制我指定行数。
如果我可以像使用 bootstrap 那样动态定义行,那就太好了。这样一来,一行中的内容直到前一行占用了它需要的所有空间后才会开始。

根据我的理解,您必须在 Prawn 中定义布局网格:

    pdf.define_grid(columns: 12, rows: 12, gutter: 10)

假设我做了这样的事情:

pdf.grid([0,0]).bounding_box do
  pdf.text "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Maecenas faucibus mollis interdum."
end

pdf.grid([1,0]).bounding_box do
  pdf.text "some text"
end

显然 [0,0] 边界框中的文本将与 [1,0] 边界框中的文本发生冲突,因为它们太多了[0,0] 中的内容,因此它溢出到它下面的行中。

因为 bootstrap 没有固定在物理列/行布局网格上,所以 Bootstrap 允许 [0,0] 中的内容根据需要占用尽可能多的空间,然后开始 [1 ,0] 之后的内容。

问题是 prawn 的布局网格似乎直接应用于 pdf 文档的物理位置,但我不希望它这样做。

希望这是有道理的。在 Prawn 中有这样的可能吗?否则我预见到自己不得不完全放弃我的 pdf 的专栏,这将呈现大量空白。

Prawn PDF manual , 第 74 页的布局信息

最佳答案

有了 Prawn 表,它可能是这样的:

require 'prawn'
require 'prawn/table'

Prawn::Document.generate("junk4.pdf") do

  font "Helvetica"

  text "Test Table", :style => :bold_italic
  stroke_horizontal_rule

  move_down 20

  table([ ["short", "short", "loooooooooooooooooooong "*30],
          ["short", "loooooooooooooooooooong "*15, "short"],
          ["loooooooooooooooooooong "*10, "short", "short"] ])

end

关于ruby-on-rails - Prawn 网格布局: Dynamic content colliding with subsequent rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998491/

相关文章:

ruby-on-rails - 使用关联数据发布 JSON

mysql - ActiveRecord:查询列不在数组中的位置

ruby-on-rails - 如何在 rails 4 中验证 .csv 文件

ruby-on-rails - Ruby on Rails 'find' 问题

ruby - 从命令行使用 bundler 将 gem 添加到 gemfile

Python Camelot - 如何从表中删除换行符/n

ruby-on-rails - 无法分配请求的地址 - bind(2) 用于 "xyz.herokuapp.com"端口 28159 (Errno::EADDRNOTAVAIL)

ruby-on-rails - 当前正在执行的代码

ios - 通过 WhatsApp 共享 PDF

javascript - 如何使用 NodeJS 下载 pdf 并将其发送到客户端?