首页 > 解决方案 > 将 PDF 与活动存储相结合

问题描述

我正在尝试将多个 pdf 合并到一个可下载的文件中。我有一个带有多个房间名称的模型,并且电子邮件房间附有一个 pdf,它是房间的布局。目标是能够根据房间列表下载所有房间布局。我找到了 gem combine_pdf,它看起来很棒,很简单,但我觉得我错过了一些东西。我得到很多“没有这样的文件或目录@rb_sysopen -”但是当我剪切并粘贴以下链接时,它工作正常。

当前代码

 def index
  @forms = Form.all
  @forms.each do |form|
    pdf = CombinePDF.new
    pdf << CombinePDF.load(url_for(form.image))
 end
end

我没有下载部分,但文档说使用 send_data combined_file.to_pdf,文件名:“combined.pdf”,输入:“application/pdf”

但是我如何从控制器访问视图并使其可下载?

更新:我能够使用以下代码通过所有错误。但我不知道如何创建下载链接

def index
 @forms = Form.all
 @pdf = CombinePDF.new
 @forms.each do |form|
   file = open('http://evanliewer.com/orientation/test.pdf')
   @pdf << CombinePDF.load(file.to_path)
 end
 @pdf.save "combined.pdf"
end

标签: ruby-on-railsrubypdf

解决方案


能够弄清楚。下面是控制器:

require 'net/http'

def viewproject
  @forms = Form.all
  respond_to do |format|
    format.html
    format.pdf do
    pdf = CombinePDF.new
    @forms.each do |form|
      pdf << CombinePDF.parse( Net::HTTP.get( URI.parse( url_for(form.image.service_url) ) ) )
    end
    send_data pdf.to_pdf, :disposition => 'inline', :type => "application/pdf"
  end
end

结尾

视图是

<%= link_to "Printable Receipt (PDF)", cabinpdf_path(@forms, format: 'pdf', disposition: "attachment") %>

我现在要回去清理它,但很高兴我能得到它。我之前错过的两个秘密是,如果您使用 .service_url 来查找 url 的活动记录调用效果最好,我使用 require 'net/http' 以这种方式访问​​它,因为路径不工作,因为它没有存储本地。它目前不适用于我的本地(使用那里的本地存储),但正在使用 heroku 进行生产。


推荐阅读