2012-02-27 23 views
7

Cómo render de gambas pdf como archivo adjunto en ActionMailer? Utilizo el método de trabajo demorado y no entiendo, ¿cómo puedo presentar el archivo pdf en acción publicitaria (no en el controlador)? ¿Qué formato debo usar?Rails 3 Render Prawn pdf en ActionMailer

Respuesta

7

Solo tiene que decirle a Prawn que represente el PDF en una cadena y luego lo agregue como un archivo adjunto al correo electrónico. Consulte el ActionMailer docs para obtener detalles sobre los archivos adjuntos.

He aquí un ejemplo:

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

Ya tengo vistas/facturas/show.pdf.prawn. InvoicesController lo procesa con éxito. Intenté renderizarlo usando render_to_string en el programa de correo y obtuve PDF corrupto. ¿Cómo renderizar este archivo de vista existente? Puede ser que necesite especificar: tipo o formato para render_to_string. – maxs

0

Mi solución:

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

PDF fue corrompido porque no escribo bloque de función de correo electrónico y de correo electrónico de varias partes era incorrecta.

3

Seguí los RailsCasts para PRAWN. Tomando lo que ya se ha dicho y lo que estaba tratando de lograr de manera similar, establecí el nombre del archivo adjunto y luego creé el 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 
Cuestiones relacionadas