如何遍历 collection,并将每个项目放在其自己的 Prawn 方格中?

How to iterate through a collection, and place each item in its own Prawn grid square?

我在 Rails 应用程序中使用 Prawn 生成平铺 objects 的 PDF - 类似于邮件合并标签的页面。

我已经在 pdf 文档中设置了一个网格,但我无法弄清楚如何使用我的 collection.

遍历该网格

我的 pdf class 看起来像这样。

class MyPdf < Prawn::Document
  def initialize(vessels, view)
    super(page_layout: :landscape)
    @objects = objects

    define_grid columns: 2, rows: 3, gutter: 10

    build_page
  end

  def build_page
    @objects.each do |object|
      [0,1].each do |col|
        [0,1,2].each do |row|
          grid(row,col).bounding_box do
            text object.name
          end
        end
      end
    end
  end
end

此代码显然不起作用,并且没有将每个 object 放置在新的网格正方形中并根据需要创建新页面。

如何遍历我的 object 并将每个都放在自己的网格方块中?

(注意。我知道 prawn-labels gem,但它有一些限制,因此不适合我的需要。)

问题是您要为每个项目写入每个网格位置。 试试这个,每个对象应该只写一次,并在需要时创建一个新的页面 + 网格。

def build_page
  define_grid columns: 2, rows: 3, gutter: 10
  col = 0
  row = 0
  @objects.each do |object|
    grid(row,col).bounding_box do
      text object.name
      if row == 2 && col == 1
        start_new_page
        define_grid columns: 2, rows: 3, gutter: 10
        col = 0
        row = 0
      else 
        if col == 1
          row += 1
          col = 0
        else
          col += 1
        end
      end
    end
  end
end