【发布时间】:2015-09-07 09:44:36
【问题描述】:
我有一个场景,我需要基于对象数组生成多页 pdf。
以下是我的模型:
# Member has_many certificates
class Member < ActiveRecord::Base
has_many :certificates, dependent: :destroy
before_save :set_expiry
def self.delete_expired
where(expire_at: Date.today).destroy_all
end
private
def set_expiry
self.expire_at = 15.days.from_now
end
end
# certificate belongs_to member
class Certificate < ActiveRecord::Base
belongs_to :member
belongs_to :certificate_type
belongs_to :company
def company_name
company.name
end
def page_orientation
company_name == 'CompanyA' ? 'Landscape' : 'Portrait'
end
def page_height
company_name == 'CompanyA' ? '10.5in' : '11in'
end
def page_width
company_name == 'CompanyA' ? '7in' : '8.5in'
end
end
# each type can have many certificates
class CertificateType < ActiveRecord::Base
has_many :certificates
end
用户流程如下:
- 用户上传包含会员记录的 Excel 文件。系统存储记录。
- 然后用户可以为单个成员生成证书。 (已经开始工作了)。
- 用户可以为上传的所有成员中的多个成员批量生成证书。
我有一个自定义表单,我在其中创建证书对象(复选框选择),然后提交表单。控制器接收证书对象的散列。我必须一一遍历所有对象以为其关联成员创建证书。问题是每个证书都有自己的模板和一些自定义页面布局设置,如方向、宽度和高度。我想生成一个包含多个页面的单个 pdf 文件,其中每个页面都是一个证书。我被困在我应该在哪里以及如何传递每个证书的页面布局设置上。我在控制器中尝试了 render_to_string 并尝试在那里设置页面布局选项,但它似乎不起作用。我需要一些建议或指点。
【问题讨论】:
-
是否使用外部实用程序,例如
poppler-utils一个选项(即您是否可以控制服务器)?如果它在 Heroku 或其他东西上,它可能不是。如果是这样,我可以为您详细介绍如何在您的场景中使用它。 -
@fdisk 这不是 Heroku。我正在使用数字海洋,我想应该可以。
标签: ruby-on-rails ruby pdf wicked-pdf