我正在尝试在 rails 应用程序中使用 prawn 创建一个 pdf 报告。有很多部分包含用户生成的内容,我想尝试将它们组合在一起。有时这会超过一页,从而导致无法分组错误。然后我尝试使用事务,以便在发生错误时可以回滚,然后在不使用 group 方法的情况下输出内容。
问题是回滚填满了页面。它从 pdf 中删除了多余的页面,但当我尝试重做它时,仍然有错误的页数和重叠内容输出。根据大虾文档,我在回滚后重置了 y 位置,但我仍然遇到问题。
例如。以下测试代码写入 2 页数字,回滚到开头,然后再次尝试写入相同的数字。它会产生一个单页 pdf,其中第二页数字与第一页重叠,页数为 2。即使我使用的是 prawn number_pages 方法,页面底部的页数也相互重叠
class TestReport < Prawn::Document
def to_pdf
font('Helvetica')
bounding_box([bounds.left, bounds.top - 50], :width => bounds.width, :height => bounds.height - 100) do
text 'begin'
y_pos = y
transaction do
begin
group do
64.times do|i|
text i.to_s
end
end
rescue
rollback
end
end
self.y = y_pos
64.times do|i|
text i.to_s
end
text 'end'
text page_number.to_s
end
page_numbers(1)
#render
end
def page_numbers(start)
string = "page <page> of <total>"
options = { :at => [bounds.right - 150, 40],
:width => 150,
:align => :right,
:start_count_at => start,
:color => "000000" }
number_pages string, options
end
end
def test_report
pdf = TestReport.new()
pdf.to_pdf
send_data pdf.render, filename: "test.pdf",
type: "application/pdf",
disposition: "inline"
end
问题似乎与事务回滚有关。我想要的主要是能够使用 group 方法。还有其他方法吗?
我的代码错了吗?我是否遗漏了某些东西或当前无法进行交易。
我目前在 ruby on rails 应用程序中使用 master prawn 分支( gem 'prawn', :git => 'git://github.com/prawnpdf/prawn.git', :branch => 'master')。