Rails 3 Render Prawn pdf in ActionMailer

前端 未结 3 1246
青春惊慌失措
青春惊慌失措 2021-01-05 07:10

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

相关标签:
3条回答
  • 2021-01-05 07:38

    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
    
    0 讨论(0)
  • 2021-01-05 07:39

    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.

    0 讨论(0)
  • 2021-01-05 07:40

    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
    
    0 讨论(0)
提交回复
热议问题