【发布时间】:2011-09-14 00:14:20
【问题描述】:
我在控制器中使用 PDFkit 构建一系列 PDF,将它们压缩,然后发送给用户。
为了控制输出样式,我告诉 PDFKit 在内容生成期间使用哪些样式表。我需要传递 CSS 文件的文件引用。由于 Rails 现在正在编译和重命名我的样式表,我不确定如何在我的控制器中引用已编译的 CSS 资产。
这是我以前做的:
InvoicesController < ApplicationController
def download
kit = PDFKit.new(render_to_string(:show, :layout => false))
kit.stylesheets << "#{Sass::Plugin.options[:css_location]}/application.css"
kit.to_file("#{file_date_string}.pdf")
# snip
end
end
Sass::Plugin.options[:css_location] 现在返回不正确的位置,更不用说 application.css 不再是文件的有效名称。我应该提一下,我有一个 app/assets/application.css 文件用作我的 SCSS 文件的清单,并且它通过 stylesheet_link_tag() 方法在我的视图中正常工作。
基本上我正在寻找的是一个等效于 assets_path() 的控制器,以便执行以下操作:
kit = PDFKit.new(render_to_string(:show, :layout => false))
kit.stylesheets << asset_path('application.css')
kit.to_file("#{file_date_string}.pdf")
谁能帮忙?
【问题讨论】:
-
其实这里还有一个问题:你需要使用绝对文件系统路径来引用带有pdfkit的样式表。资产路径虽然返回一个相对的“网络路径”。我现在通过创建一个放在公共/样式表中的 pdf.css 解决了这个问题。不理想,因为它避免了资产管道,但有效并迫使我将 pdf 相关的样式从我的 app.css 中分离出来。
-
请注明正确答案。这对社区有很大帮助。
标签: ruby-on-rails ruby-on-rails-3.1 asset-pipeline