動的コンテンツから生成された HTML ファイルから PDF を生成しようとしています。そのため、HTML コンテンツを取得して PDF をレンダリングするコントローラー アクション「generate_pdf」があります。PDF生成ビットは正常に動作します。HTML の生成は、私が立ち往生している場所です。
#reports_controller.rb
def generate_pdf
@report = Report.where(:id => params[:id])
html_content = render_to_string(:layout => false)
#Use the html_content to generate PDF
end
erb ファイルは次のようになります。
#views/reports/generate_pdf.html.erb
This is the generated pdf from erb.
The following is a generated content. The report's id is <%= @report.id %>
and the name is "<%= @report.name %>". </br>
It has <%= @report.items %> items.
アンダースコア テンプレートのないこの erb はうまく機能し、render_to_string
正しい HTML コンテンツを生成します。
しかし、underscore.js テンプレート (同じレポートがブラウザーにも表示され、アプリケーションは Backbone.js と Underscore.js を頻繁に使用する) を使用してレポートのコンテンツを生成すると、render_to_string
正しくない HTML が返されます。つまり、出力は underscore.js テンプレート コード自体であり、実際のコンテンツではありません。
{{ _.each(items, function(item) { }}
...
render_to_string
underscore.js テンプレートをレンダリングする内部で使用できる JavaScript 環境はありません。どうすればこの状況に対処できますか? 私たちのテンプレートのほとんどは underscore.js にあるため、PDF 専用の別のテンプレート ( ERB で) を作成する代わりに、できるだけ多くのテンプレートを再利用することが理にかなっていると考えました。