所以我正在使用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文件中没有链接引用或任何内容。
答案 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);