2

我需要一个动态、异步生成 PDF 并直接推送到浏览器的系统,没有可用的磁盘存储。使用虾似乎很容易,它获取数据并将其发送到浏览器而不先将其存储在某个地方,我在网上找不到任何东西。我想到了 Faye,但是 Faye 可以处理将 PDF 推送到浏览器吗?

4

3 回答 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 回答