gpt4 book ai didi

ruby-on-rails - Prawn pdf组、事务和回滚方法问题

转载 作者:行者123 更新时间:2023-12-01 12:55:00 24 4
gpt4 key购买 nike

我正在尝试在 Rails 应用程序中使用 prawn 创建一个 pdf 报告。有很多部分包含用户生成的内容,我想尝试将它们组合在一起。有时这会超过一页,导致无法分组错误。然后我尝试使用事务,以便在发生错误时我可以回滚,然后不使用组方法输出内容。

问题是回滚塞满了页面。它从 pdf 中删除了额外的页面,但仍然有错误的页数并在我尝试重做时输出重叠的内容。 根据 Prawn 文档,我在回滚后重置了 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

问题似乎出在事务回滚上。我想要的主要是能够使用组方法。还有别的办法吗?

我的代码错了吗?我是不是遗漏了一些东西或目前无法进行交易。

我目前在 ruby​​ on rails 应用程序中使用 master prawn 分支 ( gem 'prawn', :git =>'git://github.com/prawnpdf/prawn.git', :branch => 'master').

最佳答案

这个问题现在已经很老了,但我会发布一个答案,因为它是搜索异常时谷歌上的第一个点击。

Transactions 仍然不能使用分页符 (v 1.0.0.rc2),所以我创建了一个辅助方法,它首先尝试使用分组,然后如果发生异常,它只是在不分组的情况下重试,使内容跨越多个页面。

def group_if_possible(pdf, &block)
begin
pdf.group { block.call }
rescue Prawn::Errors::CannotGroup
block.call
end
end

示例:创建表时使用它:

group_if_possible(pdf) do
pdf.table(rows)
end

编辑:
分组已从 Prawn 1.x 中删除,但有一个非官方的分组 gem 适用于 Prawn 2: https://github.com/ddengler/prawn-grouping

关于ruby-on-rails - Prawn pdf组、事务和回滚方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com