wicked_pdf和Rails不会用@import加载css

时间:2014-05-24 18:33:02

标签: css ruby-on-rails twitter-bootstrap pdf wicked-pdf

所以我正在使用Wicked_pdf,我也尝试了pdfkit。

两者都有同样的问题。也就是说,当我尝试引用导入部分bootstrap的样式表时,pdf转换失败。

这就是我在控制器中所做的事情

html = render_to_string(partial: "users/direct_deposit_info.html", layout: "layouts/pdf")
UserMailer.send_email(current_user.email,'Direct Deposit Information',content, html)

这就是样式表中不断破坏并导致其失败的原因: 这是我的print.css.scss:

@import 'bootstrap/variables';
@import 'bootstrap/print';
@import 'general';

这就是我在layouts / pdf中所做的。如果我删除对'print'样式表的引用,它将成功转换为pdf并且一切正常,除了我的pdf没有完全样式化。如果我保留'print'参考,那么它会中断

<%= wicked_pdf_stylesheet_link_tag "fonts" %>
<%= wicked_pdf_stylesheet_link_tag "print" %>
<%= wicked_pdf_stylesheet_link_tag "application/direct_deposit_check" %>

这是我得到的错误:

Failed to execute:
"/Users/bdog/.rvm/gems/ruby-1.9.3-p448/bin/wkhtmltopdf" -q                  
"file:////var/folders/cn/9n6mzxt52d1c5j2lt3868rkr0000gn/T/wicked_pdf20140524-51775-1bjnzku.html"     
"/var/folders/cn/9n6mzxt52d1c5j2lt3868rkr0000gn/T/wicked_pdf_generated_file20140524-51775-  1ysvtz9.pdf" 
Error: PDF could not be generated!
 Command Error: 

所以我的问题是,在Rails中,有没有办法让这些导入的CSS进入我的HTML而不会吓到它?

我需要bootstrap打印和变量css,这样我的general.css文件就可以访问bootstrap文件包含的变量。

修改的 如果我将一个普通的rails样式表链接标记添加到'print.css.scss',这就是我在渲染的html文件中得到的内容:

<link href="//localhost:3000/assets/print.css?body=1" media="screen" rel="stylesheet" type="text/css" />

如果我使用wicked_pdf_stylsheet_link_tag“print”,那么我会得到相同的错误,并且在我渲染的html文件中没有链接引用或任何内容。

1 个答案:

答案 0 :(得分:0)

好消息,但仍然不明白发生了什么。事实证明链接正确呈现。 在我的_pdf.html.erb布局文件中,我链接了样式表,如下所示:

<style type='text/css'>
<%= raw Consumer::Application.assets.find_asset('fonts.css.scss').body %>
<%= raw Consumer::Application.assets.find_asset('print.css.scss').body %>
<%= raw Consumer::Application.assets.find_asset('application/direct_deposit_check.css.scss').body %>

当我将渲染的html保存到文件并在浏览器中打开时,我确实得到了我正在寻找的样式正确的页面。但是,由于我需要页面是在电子邮件中,它实际上并没有被发送,因为我的服务器仍然像我之前解释的那样停止。

经过进一步调查,由于我将渲染的html电子邮件保存到文件中,然后将该文件转换为pdf并将该pdf保存到文件中,我发现原始html会被渲染并保存,但pdf没有' t所以我假设有问题的行是在我的控制器中创建我的pdf的行:( attach变量是我在第一篇文章render_to_string(partial: "users/direct_deposit_info.html", layout: "layouts/pdf")中呈现的原始html文件)

File.delete("#{Rails.root.to_s}/tmp/dd_raw.html") if File.exist?("#{Rails.root.to_s}/tmp/dd_raw.html")     
File.write("#{Rails.root.to_s}/tmp/dd_raw.html", attach)

# Create new pdf from string
kit = WickedPdf.new.pdf_from_string(attach)

# save to file
file_path = "#{Rails.root.to_s}/tmp/direct_deposit_info.pdf"
File.delete(file_path) if File.exist?(file_path)

File.open(file_path, 'wb') do |file|
  file << kit
end

修改

我也尝试从命令行运行wkhtmltopdf命令并使用--ignore-load-errors无效。它呈现了一个空白的pdf。 我确实得到了以下内容:Warning: Failed loading page http: (ignored) 我想这与我在我的字体css中引用url有关。 像这样:src: url(http://localhost:3000/assets/metric-thin.eot);