ruby-on-rails - pdfkit 不设置 pdf 样式

标签 ruby-on-rails css ruby-on-rails-3.1 pdf-generation pdfkit

我有一个使用 pdfkit 创建 pdf 文档的 Rails 3.1 应用程序,除了生成的 pdf 没有任何样式之外,一切都按规定工作。我假设 wkhtmltopdf 无法访问我的样式表,并且这不是一个更大的问题。有人知道您将如何允许访问这些样式表吗?我基本上已经关注了关于这个主题的 railscast #220,但是我不得不创建一个新的初始化程序来让 pdfkit 与 rails 3.1 一起工作。

这是我必须用来让 pdfkit 与 rails 3.1 一起工作的初始化程序

ActionController::Base.asset_host = Proc.new { |source, request|
  if request.env["REQUEST_PATH"].include? ".pdf"
    "file://#{Rails.root.join('public')}"
  else
    "#{request.protocol}#{request.host_with_port}"
  end
 } 

pdf 的链接如下所示:

<%= link_to 'Download PDF', load_path(@load, :format => "pdf") %>

这会给我一个指向没有样式的 pdf 的链接。

在我的 application.rb 中,我已经这样配置了 pdfkit:

config.middleware.use PDFKit::Middleware, :print_media_type => true

我也将其添加到我的 layouts/application.html.erb 文件中:

<%= stylesheet_link_tag    "application", :media => "all" %>

最佳答案

https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb 中找到的中间件代码中窃取了几行代码

您可以使用:

root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')

我的例子是:

html = render_to_string #render current action to string
root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')
kit = PDFKit.new(html, :print_media_type => true)

关于ruby-on-rails - pdfkit 不设置 pdf 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044659/

相关文章:

css - Bootstrap 不清除中央 div

ruby-on-rails - 在 Rails 应用程序中需要 csv?

javascript - 动态创建时如何将 select 的值绑定(bind)到输入

mysql - 尝试访问我的 ruby​​ 项目 - 与 mysql 有关的 LoadError

ruby-on-rails - 深层嵌套资源 rails

ruby-on-rails-3.1 - 无法从 Linkedin 对您进行身份验证,因为 "Invalid credentials"

ruby-on-rails - 处理 Rails 中嵌套静态页面的最佳方法是什么?

ruby-on-rails - Rails 设计 - Facebook + Twitter +

html - 我无法获得以登录页面为中心的登录表单

css - Angular 2 - 到处都是重复的 &lt;style&gt; block