2012-04-24 10 views
3

私はレールアプリケーションで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 => 'マスター')。

答えて

1

ブラッドEdigerはGoogleグループにあなたの質問に答えたように見えますが、これで助けを求めて誰の利益のために、ここで彼の応答があります:悲しいこと

、彼らは新しい ページを起動したときにトランザクションがまだ正常に動作しません。またはページコレクションを変更します。今

https://github.com/prawnpdf/prawn/issues/268

-be

3

この質問はかなり古いですが、それは例外を検索Googleで最初のヒット曲の一つであるので、私は答えを投稿します:それは既知の問題です。

トランザクションはページ区切り(v 1.0.0.rc2)でまだ動作しません。そのため、まずグループ化を使用しようとするヘルパーメソッドを作成し、例外が発生した場合はグループ化せずに再試行し、 1ページ。

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

EDIT:
グループはエビ1.xから除去されたが、エビ2ためにうまく機能非公式グルーピング宝石がある:

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

例:テーブルを作成する際にそれを使用してhttps://github.com/ddengler/prawn-grouping

関連する問題