在浏览器中渲染PDF(而不是下载默认值)

时间:2015-05-22 20:31:20

标签: ruby-on-rails pdf amazon-s3 wicked-pdf

我将PDF收据存储在S3中。我使用WickedPDF生成PDF文件。通过我们的应用程序的管理区域,有一个“下载”链接,这只是到S3路径的直接链接:

link_to "Download", order.receipt.url unless order.receipt.blank?

我对如何将其默认在浏览器窗口中打开而不是直接下载有任何想法?

4 个答案:

答案 0 :(得分:1)

诀窍是更改标题,如果您链​​接到静态文件,您的网络服务器(S3)将添加标题Content-Disposition: attachment; filename="name.pdf"而没有此标题,浏览器将尝试呈现此内联(同一窗口)。

要解决此问题,您可以在控制器上执行操作,将文件本身下载并将其传送给用户

require "open-uri"

class OrderController
  def  receipt
    @order=Order.find(....)

    render text: open(@order.receipt.url).read, content_type=>'application/pdf'
  end
end

显然要添加一条路线来识别订单并链接到这个新动作,这将导致pdf下载的pdf没有'附件'报头中。

答案 1 :(得分:0)

渲染pdf:

render pdf: "Invoice",
       orientation: 'Portrait',
       template: "Invoice/download",
       page_size:  'Letter'

答案 2 :(得分:0)

如果PDF应显示在页面的一部分中,则可以在页面上使用以下代码

<object data="<%= upload.file.url %>" width="100%" height="100%" style="min-height: 100%; height:100%; width:100%" type="<%= upload.mime_type %>">
  <p>No PDF render functionality on your device...</p>
</object>

如果您只想将PDF显示为整页文件,请在您的控制器中使用它(动态创建pdf)

pdf = @sales_invoice.pdf
send_data pdf.render, filename: "sales_invoice.pdf",
                      type: "application/pdf",
                      disposition: "inline"

答案 3 :(得分:-1)

使用send_file方法。这是可以帮助您的链接。 http://apidock.com/rails/ActionController/Streaming/send_file