PDF が動的に、非同期に生成され、ブラウザに直接プッシュされるシステムが必要ですが、利用できるディスク ストレージはありません。エビを使用するために resque を取得するのは簡単なようです。そのデータを取得し、最初にどこかに保存せずにブラウザーに送信します。オンラインで何も見つかりません。Faye のことを考えましたが、Faye は PDF をブラウザにプッシュすることができますか?
3 に答える
「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
以前に.netでこれを行ったことがあります.netでは、iframeのsrc属性がストリームを返すサービスに設定されています。また、このサービスは http ヘッダーを content-inline に変換して、ブラウザーがダウンロードしようとせず、代わりにインラインでレンダリングしようとするようにします。これを実行しようとしても、ブラウザーに pdf プラグインがないと機能しません (最新のプラグインには必要ですが、常に IE6 を使用している人物がいます)。似たようなことをするか、少なくとも、他の何かで書かれたサービスを対象とするページの iframe を行います。
これらの PDF のサイズはどれくらいですか? データベースには BLOB 列があり (ストレージがない場合は SQLite を使用していません...)、結果の PDF をそこに保存できます。
または、結果の PDF を Redis DB に保存できます。または、S3 に保存します。
一方、ブラウザーは (ajax を使用して) 時々ポーリングして、PDF が完成したかどうかを確認し、準備が整うとすぐに PDF をダウンロードしてユーザーに表示します。