将Prawn PDF保存为Paperclip附件?
我正在使用Prawn和Prawnto向用户显示基于PDF的报告,但在某些情况下,我还想将PDF保存为我的某个模型的附件。 我正在使用Paperclip来处理我的所有附件。 有没有人对如何做到这一点有任何建议?
谢谢!
使用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的文件引用传递给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
我通过相反的方式使它在没有实例eval的情况下工作:在模型中生成PDF并在控制器中呈现它
在模型中:
def generate_pdf Prawn::Document.new(:page_size => 'A4', :top_margin => 0, :left_margin => 0) do |pdf| end.render end
然后,您可以将其作为邮件附件发送:
attachment = generate_pdf mail = Notifier.send_pdf(attachment) mail.deliver
或者在控制器的浏览器窗口中呈现它:
send_data your_model.generate_pdf, :type => "application/pdf", :disposition => 'inline'
这对我有用
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 Albrecht,您将保存图像作为附件,但为了将pdf保存为附件,您需要再添加一个validation –
**** validates_attachment:document,content_type:{content_type:’application / pdf’} ****
- 使用Ruby 1.8.7的未定义方法`has_attached_file’,带有paperclip 2.3.8 gem for Rails 2
- Rails Heroku服务器回形针Amazon S3 – AWS :: S3 :: Errors :: RequestTimeout
- Heroku:使用回形针运行imagemagick
- Rails paperclip gem – 从私人文件夹中获取文件
- 无法弄清楚是什么导致我的测试失败
- Paperclip Errno :: EACCES(权限被拒绝 – /系统)
- Rails3和Paperclip
- Ruby on Rails,Paperclip,Heroku,GitHub和AWS – 保护密钥
- rails 3,paperclip(&formtastic) – 删除图像附件