1

我正在尝试使用以下代码生成pdf:

    archivo = render_to_string(
      :pdf => "formulario_de_registro.pdf",
      :template => 'pdf/profile_download.pdf.haml',
      :layout   => 'pdf/body.pdf.haml',
      :margin => { :bottom => 40, :top => 30 },
      :header => {
        :html => { :template => 'layouts/pdf/header.pdf.haml'},
        :font_size => 13},
      :footer => {
        :html => { :template => 'layouts/pdf/footer.pdf.haml'},
        :line => true}
    )
    # from here is just for debugging purposes
    save_path = Rails.root.join('tmp','prueba.pdf')
    File.open(save_path, 'wb') do |file|
      file << archivo
    end

如果我在控制器的操作中运行此代码,效果很好,但我的邮件程序类中的相同代码只呈现 HTML,而不是 PDF。然后,如果我调用WickedPdf.new.pdf_from_string(archivo)生成一个 PDF,但没有页眉或页脚,这是正确的,因为在生成的 HTML 中不包含页眉或页脚。有什么我想念的吗?请帮忙。无论如何,我正在使用:

  • wkhtmltopdf 0.11.0 rc1
  • 导轨 (3.2.3)
  • wicked_pdf (0.7.9)

谢谢!

4

1 回答 1

3

WickedPdf 不像 ActionController 那样在 ActionMailer 中使用 alias_method_chain :render_to_string。

首先,将 wicked_pdf 更新到 0.8.0 版或 git master。这将允许您将其包含在 actionmailer 类中:

然后,您可以通过手动包含 PdfHelper 模块并直接调用该方法来解决此问题,如下所示:

# Mailer
class Notifications < ActionMailer::Base
  include PdfHelper

  def send_email
    archivo = render_to_string_with_wicked_pdf(
      :pdf => "formulario_de_registro.pdf",
      :footer => { :html => { :template => 'layouts/pdf/footer.pdf.haml' } }
      # etc...
    )
    attachments['formulario_de_registro.pdf'] = archivo
    mail :to => 'person@example.com'
  end
end
于 2012-11-13T23:13:39.513 回答