Ruby on rails 带有PDFKit的Rails 3.1资产管道

Ruby on rails 带有PDFKit的Rails 3.1资产管道,ruby-on-rails,asset-pipeline,pdfkit,Ruby On Rails,Asset Pipeline,Pdfkit,我将PDFkit与rails 3.1一起使用。在过去,我能够使用render_to_string函数并从该字符串创建pdf。然后我添加样式表,如下所示。我的问题是,我不知道如何从资产管道中访问它们。(我在rails 3.0中就是这样做的) html\u string=render\u to\u string(:template=>“/faxes/show.html.erb”,:layout=>“交易请求”) kit=PDFKit.new(html\u字符串:page\u size=>Letter

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

html\u string=render\u to\u string(:template=>“/faxes/show.html.erb”,:layout=>“交易请求”)
kit=PDFKit.new(html\u字符串:page\u size=>Letter)

Rails 3.1.1中的kit.stylesheets样式表被写入/public/assets,有或没有摘要指纹

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

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


config.assets.precompile+=['trade\u request.css']

这会告诉链轮自己编译该文件


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

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

ActionController::Base.helpers.asset\u路径(“trade\u 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") 

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

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

我想,如果通过资产管道访问,更少和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')
html=render_to_string(:layout=>false,:action=>documents/invoice.html.haml'))
kit=PDFKit.new(html,:encoding=>“UTF-8”)
kit.stylesheets“test_invoice”,:type=>“application/pdf”)

有点晚,但迟做总比不做好,嗯

我会这样做:

found_asset = Rails.application.assets.find_asset( "trade_request.css" ).digest_path
kit.stylesheets << File.join( Rails.root, "public", "assets", found_asset )
found\u asset=Rails.application.assets.find\u asset(“trade\u request.css”).digest\u路径

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


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

感谢您的回复。我只是在使用application.css文件,所以我相信我不必担心预编译。我相信pdfkit运行一个单独的进程,因此当我引用文件末尾没有散列的路径时,它无法找到它。IE this works:kit.stylesheets我能看到的唯一缺点是你不能使用SASS/LESS,它必须是纯CSS。你是否设法改进了这个解决方案?以及使用资产管道生成PDF?仍然
Errno::enoint-没有这样的文件或目录
。可能的重复
found_asset = Rails.application.assets.find_asset( "trade_request.css" ).digest_path
kit.stylesheets << File.join( Rails.root, "public", "assets", found_asset )