prawnto显示新页面时不会中断的表格

ric*_*oss 5 ruby pdf-generation ruby-on-rails prawn prawnto

我有一个可变数量的表,行数可变,我想让它们一个接一个地显示,但如果一个表不适合当前页面,则将它放在下一个然后继续.我把表放在一个交易中,所以我可以回滚然后打印它,如果高度适合在curent页面,但我如何获得表高度?

我现在有这个代码

pdf.transaction do 

pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

pdf.move_down 20

#pdf.rollback 
end
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助都会很棒.或者其他任何方式来做到这一点?

最好的问候里克

小智 6

4年后... :)

正如@mx所写,回滚由于安全原因(例如“组”)而被禁用,并且仍未实现。因此,这里是我如何处理表格的中断页面:

大而简单的表(每个数据一行)

只需使用标题选项

pdf.table @data,
  header: true, # You can use 'header: 2' if your header take two rows
  font_size: 12, 
  border_style: :grid,
  horizontal_padding: 10,
  vertical_padding: 3,
  border_width: 2,
  position: :left,
  row_colors: ["FFFFFF","DDDDDD"]
Run Code Online (Sandbox Code Playgroud)

小桌子或复杂桌子

  • 做桌子
  • 检查是否需要中断页面
  • 画表

以你的例子:

t = pdf.make_table @data,
  font_size: 12, 
  border_style: :grid,
  horizontal_padding: 10,
  vertical_padding: 3,
  border_width: 2,
  position: :left,
  row_colors: ["FFFFFF","DDDDDD"]

if cursor - t.height < 0
  start_new_page
end

t.draw
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助


小智 5

@current_page = pdf.page_count

@roll = pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  pdf.rollback if pdf.page_count > @current_page

end 

if @roll == false

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end
Run Code Online (Sandbox Code Playgroud)

我希望这对我有用:-)


Igo*_*lek 0

我是虾初学者,所以这可能不是最好的解决方案,但它应该有效。

如果考虑字体大小和垂直填充以及记录数,您可以获得表格高度,@data并且可以通过调用Prawn::Document.cursor方法获取当前光标位置。

有了这两个数字,您应该能够检查该表是否适合此页面。如果没有,只需启动一个新的(通过调用Prawn::Document.start_new_page方法)。

否则表格将自动中断并在下一页继续。