Rails 3 Render Prawn pdf in ActionMailer

↘锁芯ラ 提交于 2019-12-19 02:27:19

问题


How to render prawn pdf as attachment in ActionMailer? I use delayed_job and don't understand, how could I render pdf-file in action mailer (not in controller). What format should I use?


回答1:


You just need to tell Prawn to render the PDF to a string, and then add that as an attachment to the email. See the ActionMailer docs for details on attachments.

Here's an example:

class ReportPdf
  def initialize(report)
    @report = report
  end

  def render
    doc = Prawn::Document.new

    # Draw some stuff...
    doc.draw_text @report.title, :at => [100, 100], :size => 32

    # Return the PDF, rendered to a string
    doc.render
  end
end

class MyPdfMailer < ActionMailer::Base
  def report(report_id, recipient_email)
    report = Report.find(report_id)

    report_pdf_view = ReportPdf.new(report)

    report_pdf_content = report_pdf_view.render()

    attachments['report.pdf'] = {
      mime_type: 'application/pdf',
      content: report_pdf_content
    }
    mail(:to => recipient_email, :subject => "Your report is attached")
  end
end



回答2:


I followed the RailsCasts for PRAWN. Taken what has already been said and what I was trying to similarly accomplish, I set the attachment name and then created the PDF.

InvoiceMailer:

 def invoice_email(invoice)
    @invoice = invoice
    @user = @invoice.user
    attachments["#{@invoice.id}.pdf"] = InvoicePdf.new(@invoice, view_context).render
    mail(:to => @invoice.user.email,
         :subject => "Invoice # #{@invoice.id}")
  end



回答3:


My solution:

render_to_string('invoices/show.pdf', :type => :prawn)

PDF was corrupted because I didn't write block for mail function and multi-part email was incorrect.



来源:https://stackoverflow.com/questions/9467989/rails-3-render-prawn-pdf-in-actionmailer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!