Rails 3 рендеринга креветок pdf в ActionMailer - PullRequest
7 голосов
/ 27 февраля 2012

Как вывести prawn pdf в виде вложения в ActionMailer? Я использую delayed_job и не понимаю, как я могу отобразить pdf-файл в action mailer (не в контроллере). Какой формат мне использовать?

Ответы [ 3 ]

7 голосов
/ 28 февраля 2012

Вам просто нужно сказать Prawn отрисовать PDF в строку, а затем добавить это в качестве вложения в электронное письмо. См. Документы ActionMailer для получения подробной информации о вложениях.

Вот пример:

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
3 голосов
/ 21 января 2013

Я следовал за RailsCasts для PRAWN .Взяв то, что уже было сказано и то, что я пытался выполнить аналогичным образом, я установил имя вложения и затем создал 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
0 голосов
/ 28 февраля 2012

Мое решение:

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

PDF был поврежден, потому что я не написал блок для функции почты, а электронная почта, состоящая из нескольких частей, была неправильной.

...