在prawn rails中创建每个页面的小计

时间:2013-02-20 11:05:57

标签: ruby-on-rails prawn prawnto

所以我使用一些会计数据在我的轨道上使用prawn生成我的报告。我用我的prawn创建了一个file.pdf.prawn,把报告的布局放在那里,而不是从模型中。我需要这样,我的报告底部的每个页面都有一个小计。这与从控制器生成的all_total不同。

我的意思是,就像我需要知道将在一个页面上打印多少数据然后我可以将这些数据相加。

谢谢并尊重

1 个答案:

答案 0 :(得分:0)

如果行的高度相等,您只需测试它们中有多少适合您的纸张,然后由您自己计算。

如果您的行大小不同,您可以尝试计算类似于TableCell类的行的大小。您只需添加用于定义一行的条件:

# this code probably won't work because it's not tested
# I just typed it right here to show concept

module Prawn
  class Cell
    def custom_row_height(row_id)
      each do |cell|
        index = cell.send(:row)
        if index == row_id do
          result = cell.send(:height_ignoring_span)].compact.send(:max) 
        end
      end
      result 
    end
来自https://github.com/prawnpdf/prawn/blob/master/lib/prawn/table/cells.rbhttps://github.com/prawnpdf/prawn/blob/master/lib/prawn/table/cell.rb

代码:

module Prawn
  class Cell
    # Sum up a min/max value over rows or columns in the cells selected.
    # Takes the min/max (per +aggregate+) of the result of sending +meth+ to
    # each cell, grouped by +row_or_column+.
    #
    def aggregate_cell_values(row_or_column, meth, aggregate)
      values = {}
      each do |cell|
        index = cell.send(row_or_column)
        values[index] = [values[index], cell.send(meth)].compact.send(aggregate)
      end
      values.values.inject(0, &:+)
    end

module Prawn
  class Table
    class Cell
      # Returns the total height of all rows in the selected set.
      def height
        aggregate_cell_values(:row, :height_ignoring_span, :max)
      end