我想在 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/