2011-11-18 18 views
8

私はPDFkitをレール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ファイルへの私のコントローラからの直接アクセスを得るのですか?

私はPDFミドルウェアを使用してPDFをブラウザにレンダリングすることができますが、この場合は、第三者のFAXサービスにpdfを送信する必要があります。

ありがとうございました。

Railsではライアン

+0

[Rails 3.1でコントローラからコンパイルされたアセットを参照する方法は?](http://stackoverflow.com/questions/7409948/how-does-one-reference-compiled-assets-from-the- controller-in-rails-3-1) –

答えて

0

3.1.1スタイルシートはダイジェスト指紋センサー付きとなし/パブリック/資産に書き込まれます。

これは、コード内のパスを変更するだけで、これらのファイルを参照できることを意味します。

一つの落とし穴しかし:これは、自分自身でそのファイルをコンパイルするスプロケットを伝え

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

:PDFシートはCSSのマニフェストで参照されていない場合は、プリコンパイルの設定に追加する必要があります。

代わりに、asset_pathヘルパーがコード内で動作するかどうかを確認してください。 devとproductionの正しいファイルを参照します。

+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ファイルをコピーしてを参照することになりましたそれは私が前にレール3と同じようにしたものです。詳細については、この質問をチェックしてください:Access stylesheet_link_tag from controller

+0

このソリューションを改善できましたか?アセットパイプラインを使用してPDFを生成するには? –

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') 
+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 - そのようなファイルやディレクトリはありません.' –

0

を私はこの問題を解決しようとここに上陸したと回答のどれも私のために問題を解決するように見えません。私はこの方法で.css.erbファイルを提供することができたとしても

How does one reference compiled assets from the controller in Rails 3.1?

:私は、このスタックオーバーフローポストの受け入れ答えは私のために働きました。

関連する問題