8

我正在使用带有 rails 3.1 的 PDFkit。在过去,我能够使用 render_to_string 函数并从该字符串创建一个 pdf。然后我按如下方式添加样式表。我的问题是我不知道如何从资产管道中访问它们。(这就是我在 Rails 3.0 中的做法)

html_string = render_to_string(:template => "/faxes/show.html.erb", :layout => 'trade_request')
kit = PDFKit.new(html_string, :page_size => 'Letter')
kit.stylesheets << "#{Rails.root.to_s}/public/stylesheets/trade_request.css"

所以我的问题是如何通过资产管道从我的控制器直接访问我的 css 文件?

我知道我可以使用带有 PDFkit 的 Rack Middleware 将 pdf 呈现给浏览器,但在这种情况下,我需要将 pdf 发送给第三方传真服务。

谢谢你的帮助。

瑞安

4

7 回答 7

3

刚刚也遇到了这个问题,我没有使用资产管道就解决了这个问题,而是像以前在 /public 中一样直接访问文件。不知道使用这种方法有什么可能的缺点。

我猜 LESS 和 SCSS 文件不会像通过资产管道访问时那样被处理。

      html = render_to_string(:layout => false , :action => 'documents/invoice.html.haml')
      kit = PDFKit.new(html, :encoding=>"UTF-8")
      kit.stylesheets << "#{Rails.root.to_s}/app/assets/stylesheets/pdf_styles.css"
      send_data(kit.to_pdf, :filename => "test_invoice", :type => 'application/pdf')
于 2012-05-22T21:45:08.003 回答
1

有点晚了,但迟到总比没有好,嗯。

我会这样做:

found_asset = Rails.application.assets.find_asset( "trade_request.css" ).digest_path
kit.stylesheets << File.join( Rails.root, "public", "assets", found_asset )
于 2013-09-26T21:01:53.467 回答
0

在 Rails 3.1.1 中,样式表被写入 /public/assets 有和没有摘要指纹。

这意味着您应该能够通过更改代码中的路径来引用这些文件。

但是有一个问题:如果 CSS 清单中没有引用 PDF 表,则必须将其添加到预编译配置中:

config.assets.precompile += ['trade_request.css']

这告诉 sprockets 自己编译该文件。

作为(更好的)替代方案,查看asset_path 助手是否在您的代码中工作。这将在开发和生产中引用正确的文件。

于 2011-11-18T19:25:32.933 回答
0

我最终将 css 文件复制到我的公共目录并以与之前使用 rails 3 相同的方式引用它。有关更多信息,请查看以下问题:Access stylesheet_link_tag from controller

于 2012-01-12T18:55:20.293 回答
0

尝试

= stylesheet_link_tag "application", 'data-turbolinks-track': 'reload'

于 2021-08-06T15:09:00.123 回答
0

我来到这里试图解决这个问题,但似乎没有一个答案能解决我的问题。我发现这个堆栈溢出帖子的公认答案对我有用:

在 Rails 3.1 中,如何从控制器中引用已编译的资产?

我什至可以通过这种方法提供 .css.erb 文件。

于 2016-08-09T16:06:42.077 回答
-1

您应该能够使用此方法访问样式表:

ActionController::Base.helpers.asset_path("trade_request.css")

制作你的代码:

html_string = render_to_string(:template => "/faxes/show.html.erb", :layout => 'trade_request') 
kit = PDFKit.new(html_string, :page_size => 'Letter') 
kit.stylesheets = ActionController::Base.helpers.asset_path("trade_request.css") 
于 2012-01-11T21:35:08.123 回答