为整个Prawn PDF文档设置动态高度

当我尝试使用Prawn gem for Rails生成文档时,我遇到了问题

我要做的是为我的pdf设置一个可变高度,因此根据数据库中的一些查询,PDF高度将会改变。 我这样做是因为我需要单页PDF文档。

目前,我的代码如下所示:

pdf = Prawn::Document.new(page_size: [297.64, 419.53], margin: 0) .... data = [ ["Header1", "Header2", "Header3", "Header4", "Header5", "Header6"] ] // here is the variable data cart.cart_products.each do |cp| arr = [ cp.product_code, cp.product_description, cp.amount, cp.product_metric, cp.product_unit_value, cp.total_value ] data.push(arr) end // populating the table with data pdf.table(data, :cell_style => {:border_width => 0}, :column_widths => [45, 80, 30, 42.36, 50, 50]) do |table| table.row(0).border_width = 0.1.mm table.row(0).font_style = :bold table.row(0).borders = [:bottom] end .... pdf.render_file("path/to/dir/document.pdf") 

谁能帮我这个? 谢谢。

如果不知道你究竟在调整什么,我将不得不在这里做出一些猜测。

因此,我会为返回的数据和最小文档高度建立某种行高。

 line_height = 14 min_height = 419.53 

然后我会运行查询并计算结果。 然后我会弄清楚变量高度是多少并将其添加到最小高度。

 variable_height = results.length * line_height height = min_height + variable_height 

最后:

 pdf = Prawn::Document.new(page_size: [297.64, height], margin: 0) 

这样的事情可以根据您的特定需求进行调整。

Thomas Leitner在GitHub问题评论中提出了更好的选择( https://github.com/prawnpdf/prawn/issues/974#issuecomment-239751947 ):

正是我想发布的内容😄 – 所以在这里:

您可能会为文档使用一个非常大的高度,以便虾不会自动创建一个新的。 完成所有操作后,使用Prawn :: Document#y确定当前的垂直位置。

然后你可以使用Prawn :: Document#page(一个PDF :: Core :: Page对象)来调整页面的MediaBox,如:

 require 'prawn' Prawn::Document.generate("test.pdf", page_size: [100, 2000], margin: 10) do |doc| rand(100).times do doc.text("some text") end doc.page.dictionary.data[:MediaBox] = [0, doc.y - 10, 100, 2000] end 

Thomas Leitner的致谢( https://github.com/gettalong