2011-11-18 122 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 - 沒有這樣的文件或目錄。 –