pdfkit没有样式pdf

我有一个使用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的链接如下所示:

  "pdf") %> 

这将为我提供一个没有样式的pdf链接。

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

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

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

  "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) 

对我来说,安装ubuntu是个问题。 我刚从源代码重新安装:

 # first, installing dependencies sudo aptitude install openssl build-essential xorg libssl-dev # for 64bits OS wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2 tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2 mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf chmod +x /usr/local/bin/wkhtmltopdf # for 32bits OS wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2 tar xvjf wkhtmltopdf-0.9.9-static-i386.tar.bz2 mv wkhtmltopdf-i386 /usr/local/bin/wkhtmltopdf chmod +x /usr/local/bin/wkhtmltopdf 

现在一切都适合我。 所以我的建议是不要通过这个命令sudo apt-get install wkhtmltopdf并从源代码安装它。 有关安装过程的完整说明

我知道你正在寻找能够呈现整页的解决方案,只是提醒谷歌搜索仍有无问题的解决方法

 class DocumentController < ApplicationController def show @document = Document.last # ... implement your respond_to kit = PDFKit.new(@document.content, :page_size => 'Letter') kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/pdf.css" send_data kit.to_pdf, :filename => "#{@document.title}.pdf", :type => 'application/pdf' end end 

现在pdf.css必须是css,所以如果你需要从预编译的public / assets /加载sass加载它

我也遇到了这个问题,看来当在Rails 3.1中添加资产管道时,pdfkit的样式表链接出现问题。 请参阅有关此问题的GitHub问题。

我最终切换到wicked_pdf ,我真的很高兴。 他们已经解决了这个问题,它在Rails 3.2.x上运行得很好(还没试过3.1.x)。

我使用了gem’wicked_pdf’及其助手将CSS包含在页面中。 内部帮助者只读取所有CSS文件并包含在页面本身中。 因此,如果您更喜欢使用PdfKit,请尝试研究如何包含非内联样式表。

我已成功在Rails 3.1上运行PDFKit。 我使用了不同的设置 。

起初我遇到了同样的问题,但那是因为stylesheet_link_tag的默认设置为media => "screen" ; 明确指定media => "all"修复它。