我将PDF收据存储在S3中。我使用WickedPDF生成PDF文件。通过我们的应用程序的管理区域,有一个“下载”链接,这只是到S3路径的直接链接:
link_to "Download", order.receipt.url unless order.receipt.blank?
我对如何将其默认在浏览器窗口中打开而不是直接下载有任何想法?
答案 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