Railsアプリケーションでエビを使用してpdfレポートを作成しようとしています。ユーザーが作成したコンテンツを含むセクションがたくさんあるので、まとめてグループ化してみたいと思います。場合によっては、これが複数のページにまたがり、グループ化できないというエラーが発生することがあります。次に、エラーが発生した場合にグループ メソッドを使用せずにロールバックしてコンテンツを出力できるように、トランザクションを使用しようとしました。
問題は、ロールバックによってページがいっぱいになることです。PDFから余分なページを削除しますが、ページ数が間違っていて、やり直そうとすると重複するコンテンツが出力されます。エビのドキュメントに従って、ロールバック後にy位置をリセットしましたが、それでも問題が発生します。
例えば。次のテスト コードは、2 ページの数値を書き込み、先頭にロールバックしてから、同じ数値の書き込みを再試行します。1 ページ目の pdf が生成され、2 ページ目の数字が最初のページと重複し、ページ数は 2 になります。エビの 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')。