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)
我希望这对我有用:-)
我是虾初学者,所以这可能不是最好的解决方案,但它应该有效。
如果考虑字体大小和垂直填充以及记录数,您可以获得表格高度,@data并且可以通过调用Prawn::Document.cursor方法获取当前光标位置。
有了这两个数字,您应该能够检查该表是否适合此页面。如果没有,只需启动一个新的(通过调用Prawn::Document.start_new_page方法)。
否则表格将自动中断并在下一页继续。