私はレールアプリケーションでprawnを使用してpdfレポートを作成しようとしています。私が試して一緒にグループ化したいユーザー生成コンテンツを含むセクションがたくさんあります。時にはこれは1ページを超えて、エラーをグループ化することはできません。私は、エラーが発生した場合に、グループメソッドを使わずにロールバックしてコンテンツを出力できるように、トランザクションを使用しようとしました。prawn pdfグループ、トランザクション、ロールバックメソッドの問題
問題は、ロールバックがページを詰まらせることです。これはpdfから余分なページを削除しますが、やり直ししようとするとラップされた内容を残っているページ数が残っています。 私はロールバックの後のyの位置を、prawnのドキュメントに従ってリセットしますが、まだ問題は発生します。
たとえば、次のテストコードは、2ページの数値を書き込み、最初にロールバックしてから同じ数値をもう一度書き込もうとします。これは、最初のページ番号が2番目のページ番号と重複する1ページのpdfとなります。ページ下部のページ数も、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アプリケーション(gem 'prawn'、:git => 'git://github.com/prawnpdf/prawn.git'、:branch => 'マスター')。