Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 对虾网格布局:动态内容与后续行冲突_Ruby On Rails_Ruby_Pdf_Prawn - Fatal编程技术网

Ruby on rails 对虾网格布局:动态内容与后续行冲突

Ruby on rails 对虾网格布局:动态内容与后续行冲突,ruby-on-rails,ruby,pdf,prawn,Ruby On Rails,Ruby,Pdf,Prawn,我想在pdf文档中的不同点指定列 示例:本节有三列,该节有一列,另一节有两列 我不希望将行绑定到pdf文档上的物理位置,因为我有不同长度的动态文本,所以我无法预测某个区域内有多少内容。如果一个[列,行]框有太多的文本,它就会溢出到下一行,与那里的文本冲突 似乎prawn中的布局网格迫使我指定行数。 如果我可以像引导一样动态定义行,那就太好了。这样,一行中的内容直到前一行占用它所需的所有空间后才会开始 以下是我对您必须在Prawn中定义布局网格的理解: pdf.define_grid(co

我想在pdf文档中的不同点指定列

示例:本节有三列,该节有一列,另一节有两列

我不希望将行绑定到pdf文档上的物理位置,因为我有不同长度的动态文本,所以我无法预测某个区域内有多少内容。如果一个
[列,行]
框有太多的文本,它就会溢出到下一行,与那里的文本冲突

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

以下是我对您必须在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
pdf = Prawn::Document.new

# First section with two columns
pdf.table([['column_text_1', 'column_text_2']])

# Second section with three columns
pdf.table([['column_text_1', 'column_text_2', 'column_text_3']])
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
很明显,
[0,0]
边界框中的文本将与
[1,0]
边界框中的文本发生冲突,因为
[0,0]
中的内容太多,因此会溢出到它下面的行中

由于引导不会固定在物理列/行布局网格上,因此引导允许
[0,0]
中的内容占据所需的空间,然后开始
[1,0]
内容

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

希望这是有道理的。在对虾中可能有这样的东西吗?否则,我预见自己不得不完全放弃PDF的列,这将导致大量的空白


,第74页的布局信息

我认为网格是用于表格的。列框看起来更适合您的问题:

column_box([0, cursor], :columns => 2, :width => bounds.width) do
  text("a bunch of text ...")
end

我希望我能正确地理解你

正如第一个答案中所建议的,我会使用虾桌。 为此,请添加一个gem“对虾表”,并使用如下代码:

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
pdf = Prawn::Document.new

# First section with two columns
pdf.table([['column_text_1', 'column_text_2']])

# Second section with three columns
pdf.table([['column_text_1', 'column_text_2', 'column_text_3']])
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

如果您需要更高级的东西,您可以参考gem或在此处留下评论。

对于对虾表,它可能是这样的:

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
pdf = Prawn::Document.new

# First section with two columns
pdf.table([['column_text_1', 'column_text_2']])

# Second section with three columns
pdf.table([['column_text_1', 'column_text_2', 'column_text_3']])
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

但问题是,我不希望内容从一列流向另一列。我想让这些列完全分开,让每一列占据所需的空间。column_box的示例只显示一列流入下一列。啊,我明白了。因此,也许明虾桌就是你的门票: