5

可変数の行を持つ可変数のテーブルがあり、それらを次々に表示したいのですが、テーブルが現在のページに収まらない場合は、次のページに配置して続行します。テーブルをトランザクションに入れたので、高さが現在のページに収まる場合はロールバックして印刷できますが、テーブルの高さを取得するにはどうすればよいですか?

私は現時点でこのコードを持っています

pdf.transaction do 

pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

pdf.move_down 20

#pdf.rollback 
end

これに関するヘルプは素晴らしいでしょう。またはこれを行う他の方法はありますか?

よろしくリック

4

4 に答える 4

7

4年後... :)

@mx が書いたように、「グループ」などのセキュリティ上の理由からロールバックが無効になっており、まだ実装されていません。だから、ここでテーブルの改ページをどのように扱うか:

大きくて単純なテーブル (データごとに 1 行)

ヘッダーオプションを使用するだけ

pdf.table @data,
  header: true, # You can use 'header: 2' if your header take two rows
  font_size: 12, 
  border_style: :grid,
  horizontal_padding: 10,
  vertical_padding: 3,
  border_width: 2,
  position: :left,
  row_colors: ["FFFFFF","DDDDDD"]

小さなテーブルまたは複合テーブル

  • テーブルを作る
  • 改ページが必要かどうかを確認する
  • ドローテーブル

あなたの例では:

t = pdf.make_table @data,
  font_size: 12, 
  border_style: :grid,
  horizontal_padding: 10,
  vertical_padding: 3,
  border_width: 2,
  position: :left,
  row_colors: ["FFFFFF","DDDDDD"]

if cursor - t.height < 0
  start_new_page
end

t.draw

それが役立つことを願っています

于 2016-06-29T13:42:35.090 に答える
5

@current_page = pdf.page_count

@roll = pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  pdf.rollback if pdf.page_count > @current_page

end 

if @roll == false

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end

これが私と同じようにあなたのために働くことを願っています:-)

于 2010-02-12T11:31:03.700 に答える
0

ありがとうイゴール

私は現在、現在のページを設定しており、新しいテーブルがレンダリングされた後、new_page 変数をロールバックする前にトランザクションで設定しています。次に、ロールバックして、新しいページ変数>現在のページ変数であるかどうかを確認し、新しいページを開始してテーブルを印刷することができます。以下のコードを参照してください。

問題は、pdf.start_new_page にエラーが表示されることですが、pdf.rollback 行を取り出すだけで機能します。以下のエラーを参照してください。

任意のアイデアまたは簡単な方法があれば、1 つあるはずです !!

ありがとうリック

@current_page = pdf.page_count

pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  @the_next_page = pdf.page_count
  pdf.rollback

end 

if @the_next_page > @current_page

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end 

エラー

> You have a nil object when you didn't expect it!
The error occurred while evaluating nil.identifier

Extracted source (around line #158): 

155: end



RAILS_ROOT: C:/InstantRails/rails_apps/Macrotec-Application

Application Trace | Framework Trace | Full Trace 
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:302:in `go_to_page'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:128:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `each'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:344:in `render'
C:/InstantRails/rails_apps/Macrotec-Application/app/views/quotations/show.pdf.prawn:158:in `_run_prawn_app47views47quotations47show46pdf46prawn'
于 2010-01-17T17:47:48.823 に答える
0

私はエビの初心者なので、これは最善の解決策ではないかもしれませんが、うまくいくはずです.

フォントサイズと垂直パディング、およびレコード数を考慮するとテーブルの高さを@data取得でき、メソッドを呼び出すことで現在のカーソル位置を取得できますPrawn::Document.cursor

これらの 2 つの数値があれば、表がこのページに収まるかどうかを確認できるはずです。そうでない場合は、(メソッドを呼び出して)新しいものを開始してPrawn::Document.start_new_pageください。

そうしないと、表が自動的に分割され、次のページに進みます。

于 2010-01-17T17:27:02.340 に答える