6

開発中の SASS で wicked_pdf を正常に使用しています。このヘルパーを介して、その他のファイルのいくつかのルールを含む単一の.scssファイルを含めています。import.sass.scss

def wicked_pdf_stylesheet_link_tag(*sources)
  sources.collect { |source|
    "<style type='text/css'>#{Rails.application.assets.find_asset("#{source}.css").body}</style>"
  }.join("\n").gsub(/url\(['"](.+)['"]\)(.+)/,%[url("#{wicked_pdf_image_location("\\1")}")\\2]).html_safe
end

しかし、本番環境に切り替えても、アプリはインポートされたファイルを探しますが、見つかりません。

次に、2 つ目のマニフェスト ファイルを追加して production.rb に事前コンパイルします ( config.assets.precompile += %w(pdf.css))。このファイルには、前述のファイルを取得するための単一のrequireルールが含まれてい.scssます。このファイルは問題なくコンパイルされていますが、ヘルパーは実稼働環境で適切なファイルを選択せず​​、インポートされた.sassファイルをロードしようとしているようです。

これを解決する方法を経験した人はいますか?PDF の作成には絶対パスが必要なため、この作業は少し難しくなります。

4

2 に答える 2

8

私は開発と生産で働いている邪悪なpdfを持っています。これは私の wicked_pdf 構成のコアです:

github ユーザー antti からの wicked_pdfプル リクエストに基づいて、WickedPdfHelper (initializers/wicked_pdf.rb からロード) を更新しました。

module WickedPdfHelper
  def wicked_pdf_stylesheet_link_tag(*sources)
    sources.collect { |source|
      "<style type='text/css'>#{Rails.application.assets.find_asset(source+".css")}</style>"
    }.join("\n").html_safe
  end

  def wicked_pdf_image_tag(img, options={})
    asset = Rails.application.assets.find_asset(img)
    image_tag "file://#{asset.pathname.to_s}", options
  end

  def wicked_pdf_javascript_src_tag(jsfile, options={})
    asset = Rails.application.assets.find_asset(jsfile)
    javascript_include_tag "file://#{asset.pathname.to_s}", options
  end

  def wicked_pdf_javascript_include_tag(*sources)
    sources.collect{ |source| "<script type='text/javascript'>#{Rails.application.assets.find_asset(source+".js")}</script>" }.join("\n").html_safe
  end
end

次に、 app/assets/stylesheets/pdf.css で、いくつかの sass スタイルシートが必要です。

/* ...
*= require ./_colors
*= require_directory ./pdf
*= require_self
*/

(初期化子や config/ 内の何かを変更している場合は、Rails アプリを再起動して変更を取り込む必要があることに注意してください)

于 2012-01-03T23:22:40.610 に答える
2

私はこれについて記事を書きました: http://anlek.com/2011/09/wicked_pdf-working-in-rails-3-1/

いくつかの変更を加えたフィリップのソリューションに非常に似ています。

于 2012-02-14T18:25:53.953 に答える