2011-11-18 121 views
8

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

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" 

所以我的问题我如何通过资产pipline从我的控制器到我的CSS文件直接访问?

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

感谢您的帮助。

瑞安

+0

可能的重复[如何引用编译的资产从控制器在Rails 3.1?](http://stackoverflow.com/questions/7409948/how-does-one-reference-compiled-assets-from-the- controller-in-rails-3-1) –

回答

0

在Rails 3.1.1样式表写入/公/资产和没有指纹消化。

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

有一个问题是:如果在PDF表不是在CSS清单中引用你必须将它添加到预编译的配置:

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

这告诉链轮编制自身的该文件。

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

+0

感谢您的回应。我只是使用application.css文件,所以我不相信我必须担心预编译。我相信pdfkit运行一个单独的进程,因此当我在文件末尾引用没有散列的路径时,它找不到它。 IE这个工程: kit.stylesheets << “#{} Rails.root.to_s /public/assets/application-5c342d3a7328fd347c8ca581f6bdff60.css” 这并不: kit.stylesheets <<“#{Rails.root。 to_s} /public/assets/application.css“ 有什么办法可以获得正确的文件路径吗?谢谢! – lundie

-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") 
+0

不工作:没有这样的文件或目录 – gtournie

0

我结束了CSS文件复制到我的公开目录,并指它以同样的方式我以前用rails 3做过。欲了解更多信息,请查看这个问题:Access stylesheet_link_tag from controller

+0

您是否设法改进此解决方案?并使用资产管道来生成PDF? –

3

Just ran并且我没有使用资产管道,而是直接访问文件,就像我之前在/ 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') 
+0

我唯一能看到的是你不使用SASS/LESS,它必须是纯CSS。 – Kris

1

有点晚了,但比从未好过晚,呃。

我会做这样的:

found_asset = Rails.application.assets.find_asset("trade_request.css").digest_path 
kit.stylesheets << File.join(Rails.root, "public", "assets", found_asset) 
+0

仍然Errno :: ENOENT - 没有这样的文件或目录。 –