18

나는 Wicked_pdf를 사용하여 뷰를 PDF로 렌더링하고 이메일을 보내기 위해 actionmailer를 렌더링했지만 나는 함께 사용할 수 없습니다. actionmailer를 사용하여 특정보기의 PDF 버전을 전자 메일에 첨부하고 링크 또는 단추를 클릭하여 보내려합니다. 이메일을 보내는 link_to 명령이 있습니다.Rails 3 -보기에서 PDF보기 및 이메일에 첨부하기

다음
def sendemail 
@user = User.find(params[:id]) 
Sendpdf.send_report(@user).deliver 
redirect_to user_path(@user) 
flash[:notice] = 'Email has been sent!' 
end 

내가 내 actionmailer에있는 것입니다 : 여기에 생성 된 전자 우편을 얻는다 내 컨트롤러는 내가 많은 질문과 답변, 새우 대부분의 거래를 보았다

class Sendpdf < ActionMailer::Base 
default :from => "[email protected]" 

def send_report(user) 
@user = user 
    attachment "application/pdf" do |a| 
    a.body = #Something should go here, maybe WickedPDF.new.something? 
    a.filename = 'MyPDF' 
end  
mail(:to => user.email, :subject => "awesome pdf, check it") 
end 

end 

. 이것에 대한 간단한 대답이 있어야 할 것 같습니다. 누구든지 도와 줄 수 있습니까?

업데이트 아래 답변에서 대체 옵션으로 사용할 제안에 감사드립니다. 그러나보기를 PDF로 렌더링하고 내 전자 메일에 첨부하는 방법을 배우고 싶습니다. 나는 내가 필요한 경우 새우 또는 다른 것과 다른 것을 사용하는 것에 개방되어 있습니다.

답변

6

두 가지 방법이 있습니다.

  1. 하나, 당신은 전자 메일에서 PDF 파일을 다운로드 할 때, 당신의 각각의 컨트롤러에 대한 렌더링 새로운 PDF 액션에 더 요청이 없도록 PDF는, 당신이 보내는 이메일에 포함되어야합니다.
    이전에 해보지 않았기 때문에 효율적으로 수행하는 방법을 모르겠습니다.

  2. 또는 전자 메일에서 pdf에 대한 링크를 제공하고 사용자가이를 클릭하면 이제 pdf를 만드는 작업이 호출되고 사용자가이를 다운로드 할 수 있습니다.
    이렇게하면 pdf 파일을 다운로드 할 때 서버에 많은 부담이 있다면이 요청을 다른 곳으로 리디렉션 할 수 있습니다. 즉, 효율성을위한 거대한 범위가 있습니다.

번째 방법 (코드 PDFkit를 사용하여 작성되었습니다 제공, 그래서 따라 변경)을위한 샘플 코드 : 당

class PdfsController < ApplicationController 
    def pdf 
    respond_to do |format| 
     format.pdf { render :text => wickedPDF.new(Pdf.find(params[:id]).content).to_pdf } 
    end 
    end 
... 
end 

당신의 선택에 따라, Pdf.find(params[:id]).content를 교체하고 to_pdf 방법 wickedPDF.

그런 다음, 당신은 단순히 wickedPDF에 따라 적합한 어떤이

<%= link_to "Download", pdf_pdf_path(pdf, :format => "pdf") %> 

나처럼 이메일의 pdf 다운로드에 대한 링크를 전달할 수 있습니다.

1 : 당신이 원하는이 방법 할

+0

, 나는 내 선택의 여지가 있다면 내가 이메일로 PDF를 부착하고 싶습니다. 실제로 생각하지 않았다 작동하지 않는 것입니다 그러나 내가 알아낼 때까지 전자 메일에 "다운로드"링크를 넣는 것이 좋습니다. – FattRyan

+0

이 질문에 대한 답변을 얻지 못했습니다. 회신은 답변이 아닌 의견에 가장 잘 사용됩니다. – ghayes

33

이 좋은 방법 컨트롤러에서 PDF 생성은 다음 PARAM로 이메일이를 보낼 수 있습니다.

# controller 
def sendemail 
    @user = User.find(params[:id]) 
    pdf = render_to_string :pdf => 'MyPDF' 
    Sendpdf.send_report(@user, pdf).deliver 
    redirect_to user_path(@user) 
    flash[:notice] = 'Email has been sent!' 
end 

# mailer 
def send_report(user, pdf) 
    @user = user 
    attachments['MyPDF.pdf'] = pdf 
    mail(:to => user.email, :subject => "awesome pdf, check it") 
end 

2 : 나는에 당신이 원하는 것과 비슷한 할 노력하고있어

def send_report(user) 
    @user = user 
    mail(:to => user.email, :subject => "awesome pdf, check it") do |format| 
    format.text # renders send_report.text.erb for body of email 
    format.pdf do 
     attachments['MyPDF.pdf'] = WickedPdf.new.pdf_from_string(
     render_to_string(:pdf => 'MyPDF',:template => 'reports/show.pdf.erb') 
    ) 
    end 
    end 
end 
+0

답변 해 주셔서 감사합니다. 이 질문. 내가 한 일은 pdf를 파일로 저장하는 동작을 만든 다음 메일을 보내는 작업에서이 작업을 전자 메일에 첨부 한 다음 파일에서 지웠다는 것입니다. 좋은 방법입니다. – FattRyan

+2

나쁘지는 않지만 파일 시스템에 쓰는 것이 바람직하지 않은 경우도 있습니다. 헤로 쿠처럼. 또한 다른 프로세스에서 파일을 이동하거나 삭제할 수 없도록주의하십시오. – Unixmonkey

+1

@Unixmonkey 여기에 WickedPDF에 대한 대부분의 답변이 나와 있습니다. 나는 당신의 모든 답변에서 높거나 낮게 검색했고 다음을 설정했습니다 : https://gist.github.com/anonymous/5229508 그러나 그것을 못살게 보일 수는 없습니다. 내가 시도한 모든 솔루션이 나에게'템플릿이 누락되었습니다 .'라고 생각됩니다. 귀하의 회신을 기다리겠습니다. – David

0

를 직접 메일러에서 PDF 작성 (좀 더 관여를하지만 모델에서 호출 할 수 있습니다)

class UserMailer < ActionMailer::Base 
    require "open-uri" 
    include Rails.application.routes.url_helpers 

    default :from => "[email protected]" 

    def new_user(user) 
    @user = user 
    path_to_url = url_for({ :action=>"show", :controller=>"users", :format =>"pdf", :id => @user }) 
    file = open(path_to_url, "r") 
    attachments["user.pdf"] = file 
    mail(:to => @user.email, :subject => "New user ;)") 
    file.close 
    end 

end 

은 기본적으로는 (그것이 다른 형식으로 구성)과 뷰 자체를 렌더링 이메일에 첨부하려고 : 아직 작동하지 않습니다하지만, 않습니다.

유일한 것은, 최고의 선택이 될 것입니다 그 :(