首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成一个pdf,以便在rails 5中使用wicked_pdf保存它?

如何生成一个pdf,以便在rails 5中使用wicked_pdf保存它?
EN

Stack Overflow用户
提问于 2021-02-04 14:18:17
回答 1查看 408关注 0票数 5

在rails 5.2.4中,我试图在后台(在作业中)生成一个pdf,然后将它附加到模型中,如下所示:

代码语言:javascript
复制
pdf_contents = ApplicationController.render(
pdf: "name",
template: 'mytemplate.html.erb',
layout: 'pdf_layout.html',
disposition: 'attachment'
)

@user.attach(io: StringIO.new(pdf_contents), filename: "file.pdf", content_type: "application/pdf")

但我得到了:

代码语言:javascript
复制
WARN: ActionView::Template::Error: private method `format' called for nil:NilClass

使用

代码语言:javascript
复制
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
EN

回答 1

Stack Overflow用户

发布于 2022-11-18 04:59:20

下面的解决方案适用于我的情况。

代码语言:javascript
复制
# frozen_string_literal: true

class OrderPdfJob < ApplicationJob
  queue_as :default

  def perform(order_id)
    order = Order.find(order_id)

    # include helpers
    action_controller = ActionController::Base.new
    action_controller.view_context_class.include(ActionView::Helpers, ApplicationHelper)

    pdf = WickedPdf.new.pdf_from_string(
      action_controller.render_to_string(
        "order_pdf/summary", layout: 'pdf', locals: { order: order }
      )
    )

    # in your order model should have 'has_one_attached :summary' 
    order.summary.attach(
      io: StringIO.new(pdf),
      filename: "#{order.id}.pdf",
      content_type: 'application/pdf'
    )
    order.save!
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66047467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档