如何遍历集合,并将每个项目放置在其自己的Prawn网格正方形中?

问题描述 投票:0回答:2

[我正在Rails应用程序中使用Prawn来生成切片对象的PDF-类似于邮件合并标签的页面。

我已经在pdf文档中设置了一个网格,但是在解决如何用我的集合遍历此网格时遇到了麻烦。

我的pdf类看起来像这样。

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

此代码显然无法正常工作,并且无法将每个对象放置在新的网格正方形中,也无法根据需要创建新页面。

我如何遍历我的对象,并将每个对象放置在自己的网格正方形中?

(注意。我知道虾标签的宝石,但是它有一些限制,因此不适合我的需求。)

ruby-on-rails pdf prawn
2个回答
1
投票

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

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

0
投票

另一个不错的选择是使用'prawn-labels'gem-这可以解决此确切的问题-github repo for gem found here

© www.soinside.com 2019 - 2024. All rights reserved.