6

我在开发中成功地将 wicked_pdf 与 SASS 一起使用。我通过这个助手包含一个文件,其中包含其他文件的.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

但是切换到生产应用程序仍然会查找未找到的导入文件。

然后我添加了第二个清单文件,将在 production.rb ( config.assets.precompile += %w(pdf.css)) 中预编译,其中包含一条require规则来获取提到的.scss文件。该文件编译得很好,但似乎帮助程序在生产中没有选择正确的文件,并且仍然希望加载导入的.sass文件。

有没有人经验如何解决这个问题?PDF 创建需要绝对路径,这使得这项任务更加困难。

4

2 回答 2

8

我有邪恶的 pdf 在开发和生产中工作。这是我的 wicked_pdf 配置的核心:

我已经根据来自 github 用户 antti的 wicked_pdf拉取请求更新了 WickedPdfHelper(从初始化程序/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/

它与 Philip 的解决方案非常相似,只是做了一些修改。

于 2012-02-14T18:25:53.953 回答