我需要一个动态、异步生成 PDF 并直接推送到浏览器的系统,没有可用的磁盘存储。使用虾似乎很容易,它获取数据并将其发送到浏览器而不先将其存储在某个地方,我在网上找不到任何东西。我想到了 Faye,但是 Faye 可以处理将 PDF 推送到浏览器吗?
问问题
340 次
3 回答
0
我之前在 .net 中做过这个,我将 iframe 的 src 属性设置为返回流的服务。该服务还将 http 标头翻转为 content-inline,以便浏览器不会尝试下载它,而是会尝试将其呈现为内联。如果您尝试这样做,如果浏览器没有 pdf 插件,它将无法工作(必须是现代插件,但您总是有那个人使用 IE6)我不知道一点红宝石,但认为您应该能够做一些类似的事情,或者至少在一个页面上做一个 iframe,该页面以其他东西编写的服务为目标。
于 2012-10-06T03:56:52.053 回答
0
你可以使用“PDFkit”。示例代码是
def some_action
...
respond_to do |format|
format.html
format.pdf do
generate_pdf(file.html.haml, :css => [array of css file names that need to be added])
end
end
end
在应用程序控制器中 -
def generate_pdf(template, options={})
html = render_to_string(template, :layout => false)
kit = PDFKit.new(html, :orientation => 'Landscape')
kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/default_css1.css"
kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/default_css2.css"
# Add CSS
if options[:css]
options[:css].each do |css|
kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/#{css}.css"
end
end
send_data(kit.to_pdf, :filename => 'latest.pdf', :type => 'application/pdf', :disposition => 'inline')
end
于 2012-10-06T04:02:00.220 回答
0
这些PDF有多大?您的数据库有 BLOB 列(如果您没有存储空间,则说明您没有使用 SQLite ...),您可以将生成的 PDF 存储在其中。
或者,您可以将生成的 PDF 存储在 Redis DB 中。或将其保存在 S3 中。
另一方面,浏览器将不时地轮询(使用 ajax)以了解 PDF 是否完整,一旦准备好,它就会下载并显示给用户。
于 2012-10-06T05:54:39.453 回答