如何使用Wicked PDF将PDF附加到电子邮件时指定布局

时间:2014-12-05 04:02:21

标签: ruby-on-rails ruby pdf actionmailer wicked-pdf

当我尝试为使用Wicked PDF附加到电子邮件的pdf指定布局时,我无法收到生成的电子邮件。这是一个rails 4 app。

当我使用以下代码时,应用程序成功发送带有pdf附件的电子邮件,但没有所需的样式:

def invoice_created(invoice_id)
  @invoice = Invoice.find(invoice_id)
  @subscription = Subscription.find(@invoice.subscription_id)
  attachments['invoice.pdf'] = WickedPdf.new.pdf_from_string(
    render_to_string(:pdf => "invoice", :template => 'invoices/show.pdf.erb'))
  mail(to: 'you@example.com', subject: "Your Invoice is Ready")
end

但是当我添加布局时,什么都没有生成。

def invoice_created(invoice_id)
  @invoice = Invoice.find(invoice_id)
  @subscription = Subscription.find(@invoice.subscription_id)
  attachments['invoice.pdf'] = WickedPdf.new.pdf_from_string(
    render_to_string(:pdf => "invoice", 
                     :template => 'invoices/show.pdf.erb', 
                     :layout => 'pdf.html.erb'))
  mail(to: 'you@example.com', subject: "Your Invoice is Ready")
end

在我的控制器中,我在浏览器中显示pdf并正确使用pdf.html.erb布局:

def show
  @invoice = current_account.invoices.find(params[:id])
  respond_to do |format|
    format.html
    format.pdf do
      render :pdf => 'file_name',
      :template => 'invoices/show.pdf.erb',
      :layout => 'pdf.html.erb'
    end
  end
end

我没有在开发日志中看到任何明显的错误,除了没有创建电子邮件文件。

我看到以下情况,所以看起来它看到了布局,但不会显示它。

Rendered invoices/show.pdf.erb within layouts/pdf.html.erb (13.7ms)

布局是否存在冲突问题?

如果我尝试使用指定的布局生成多个电子邮件,请从邮件程序中删除布局代码,重新启动服务器,请求新电子邮件,然后发送我之前请求的电子邮件。

我尝试添加

:show_as_html => params[:debug].present?
邮寄给邮件,看看它是否会散发一些光线,但这也导致电子邮件无法发送。

1 个答案:

答案 0 :(得分:3)

问题代码是pdf布局:

<%= csrf_meta_tags %>

我不知道为什么我的应用中没有收到任何错误消息。我已将我的应用程序设置为显示gem 'better_errors'的错误,但未显示任何错误。我设置了一个新的应用程序,只是为了使用wicked_pdf,但没有将better_errors添加到gem文件中。

现在我收到以下错误消息:

undefined method `protect_against_forgery?'

layouts/pdf/html.erb文件中移除此行后,该应用正确附加了样式化的pdf。

以下是我用过的示例wicked_pdf示例的链接:https://github.com/stevejc/WickedPDF-Example