我有一个可变数量的表格,其中的行数是可变的,我想让它们一个接一个地显示,但是如果一个表格不适合当前页面,就把它放到下一个页面上,然后继续。我将表格放在一个事务中,这样如果当前页面适合高度,我就可以回滚,然后打印它,但是我如何获得表格高度呢?
我现在有这个代码
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
这方面的任何帮助都是很好的。或任何其他方法来做到这一点?
向里克致以最好的问候
发布于 2016-06-29 13:42:35
四年后...:)
正如@m-x所写的,由于安全原因,回滚被禁用了,就像"group“一样,并且仍然没有实现。因此,下面是我如何处理表格的分页:
大而简单的表格(每个数据一行)
只需使用标题选项
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
希望这能有所帮助
发布于 2010-02-12 11:31:04
@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
我希望这对你和我一样有效:-)
发布于 2010-01-17 17:27:02
我是一个虾的初学者,所以这可能不是最好的解决方案,但它应该可以工作。
如果考虑到@data
中的字体大小、垂直填充和记录数,就可以得到表的高度,还可以通过调用Prawn::Document.cursor
方法获得当前的光标位置。
有了这两个数字,你应该能够检查表格是否适合这个页面。如果没有,只需启动一个新的(通过调用Prawn::Document.start_new_page
方法)。
否则,表格将自动断开并继续下一页。
https://stackoverflow.com/questions/2081635
复制