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 

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

最好的问候里克

@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 

我希望这对我有用:-)

4年后…… 🙂

正如@mx所写的那样,出于安全原因,回滚被禁用,例如“group”,并且仍未实现。 那么,这里我如何处理表的break页面:

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

只需使用标题选项

 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"] 

小桌子或复杂的桌子

  • 制作桌子
  • 检查您是否需要中断页面
  • 画桌

用你的例子:

 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 

希望有所帮助

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

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

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

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

谢谢伊戈尔

我正在设置当前页面,然后在渲染新表之后和回滚设置new_page变量之前设置事务。 然后,如果新页面var>当前页面var以及它是否启动新页面并打印表格,我可以回滚并查询。 见下面的代码。

问题是现在pdf.start_new_page说错误,但如果我只是把pdf.rollback行取出它的工作原理。 见下面的错误。

任何想法任何一个或任何更简单的方法,必须有一个!!

谢谢里克

 @current_page = pdf.page_count 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"] @the_next_page = pdf.page_count pdf.rollback end if @the_next_page > @current_page 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 

错误

 > You have a nil object when you didn't expect it! The error occurred while evaluating nil.identifier Extracted source (around line #158): 155: end RAILS_ROOT: C:/InstantRails/rails_apps/Macrotec-Application Application Trace | Framework Trace | Full Trace c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:302:in `go_to_page' c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:128:in `finalize_all_page_contents' c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `each' c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `finalize_all_page_contents' c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:344:in `render' C:/InstantRails/rails_apps/Macrotec-Application/app/views/quotations/show.pdf.prawn:158:in `_run_prawn_app47views47quotations47show46pdf46prawn'