我正在使用Prawn和Prawnto向用戶顯示基於PDF的報告,但在某些情況下,我還想將PDF作爲附件保存到我的某個模型中。我爲所有附件使用回形針。有沒有人有任何建議如何做到這一點?將蝦PDF保存爲回形針附件?
謝謝!
我正在使用Prawn和Prawnto向用戶顯示基於PDF的報告,但在某些情況下,我還想將PDF作爲附件保存到我的某個模型中。我爲所有附件使用回形針。有沒有人有任何建議如何做到這一點?將蝦PDF保存爲回形針附件?
謝謝!
它應該工作,如果你只是通過文件引用到該PDF到Paperclip。
require 'prawn'
pdf = Prawn::Document.new
pdf.text("Prawn Rocks")
pdf.render_file('/path/to/prawn.pdf')
pdf_file = File.open('/path/to/prawn.pdf')
# assuming your Paperclip association is named "pdf_attachment"
my_model.pdf_attachment = pdf_file
使用prawnto時,您需要評估.pdf.prawn模板中的變量。 第二步是模仿回形針的真實文件。
生成PDF:
#find the prawwnto template you want
template = File.read("#{RAILS_ROOT}/app/views/reports/your_report.pdf.prawn")
pdf = Prawn::Document.new(:page_size => 'A4', :your_options => :etc)
pdf.instance_eval do
@report = find_report #put here, all local variables that the pdf template needs
eval(template) #this evaluates the template with your variables
end
attachment = pdf.render
保存PDF用回形針:
file = StringIO.new(attachment) #mimic a real upload file
file.class.class_eval { attr_accessor :original_filename, :content_type } #add attr's that paperclip needs
file.original_filename = "your_report.pdf"
file.content_type = "application/pdf"
#now just use the file object to save to the Paperclip association.
# assuming your Paperclip association is named "pdf_report"
@report_store.pdf_report = file
@report_store.save!
希望這有助於。
我發現這非常有助於從模型方法生成pdf。我遇到的一個錯誤是,如果您的prawnto模板使用pdf.method_name樣式,則必須命名Prawn :: Document.new「pdf」的輸出。謝謝! – Unixmonkey
我得到了它沒有實例的eval合作,通過扭轉它的其他方式:生成PDF在模型中,呈現在你控制器
在模型:
def generate_pdf
Prawn::Document.new(:page_size => 'A4', :top_margin => 0, :left_margin => 0) do |pdf|
<your pdf code here>
<copy paste from your template>
end.render
end
你就可以發送它作爲郵件附件:
attachment = generate_pdf
mail = Notifier.send_pdf(attachment)
mail.deliver
,或者使之在你的控制你的瀏覽器窗口:
send_data your_model.generate_pdf, :type => "application/pdf", :disposition => 'inline'
^這是關於如何使用普通的蝦生成例程並呈現屏幕或電子郵件的完美答案。謝謝! – Jetblackstar
這爲我工作
pdf = Prawn::Document.new(:page_size => "LETTER", :page_layout => :landscape)
pdf.render_file File.join(Rails.root, "app/pdfs", "x.pdf")
current_user.certificate = File.open("#{Rails.root}/app/pdfs/x.pdf")
current_user.save!
哪裏certificate
是我的紙夾附件保存爲模型:
class User < ActiveRecord::Base
has_attached_file :certificate
@Adam阿爾布雷希特,你將被保存的圖像作爲附件,但爲保存pdf作爲附件,您需要添加一個驗證 -
**** validates_att achment:document,content_type:{content_type:'application/pdf'} ****
謝謝它適合我。 – tjeden