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 ファイルに直接アクセスするにはどうすればよいでしょうか?

Rack Middleware と PDFkit を使用して 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に書き込まれます。

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

ただし、1つの落とし穴:PDFシートがCSSマニフェストで参照されていない場合は、プリコンパイル構成に追加する必要があります。

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

これは、スプロケットにそのファイルを独自にコンパイルするように指示します。

(より良い)代替手段として、asset_pathヘルパーがコードで機能するかどうかを確認します。これにより、開発および本番環境で正しいファイルが参照されます。

于 2011-11-18T19:25:32.933 に答える
0

この問題を解決しようとしてここにたどり着きましたが、どの回答も問題を解決していないようです。このスタックオーバーフロー投稿の受け入れられた答えが私にとってうまくいったことがわかりました:

Rails 3.1 のコントローラーからコンパイルされたアセットを参照するにはどうすればよいですか?

この方法で .css.erb ファイルを提供することさえできました。

于 2016-08-09T16:06:42.077 に答える
0

css ファイルをパブリック ディレクトリにコピーし、以前 Rails 3 で行ったのと同じ方法で参照することになりました。詳細については、この質問を確認してください:コントローラーから stylesheet_link_tag にアクセスする

于 2012-01-12T18:55:20.293 に答える
-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 に答える