wicked rails generar ruby-on-rails css ruby-on-rails-3.1 pdf-generation pdfkit

ruby on rails - rails - pdfkit no diseña pdfs



wkhtmltopdf pdf (6)

Tengo una aplicación Rails 3.1 que crea documentos pdf utilizando pdfkit, y todo funciona según lo especificado, excepto por el hecho de que los archivos PDF generados no tienen ningún estilo. Estoy asumiendo que wkhtmltopdf no tiene acceso a mis hojas de estilo y que no es un problema mayor que eso. ¿Alguien tendría una idea de cómo permitiría el acceso a estas hojas de estilo? Básicamente he seguido el railscast # 220 en el tema, sin embargo, he tenido que crear un nuevo inicializador para hacer que pdfkit funcione con los rieles 3.1.

Este es el inicializador que tuve que usar para hacer que pdfkit funcionara con rieles 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 }

El enlace al pdf se ve así:

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

Esto me dará un enlace al pdf que no tiene estilo.

En mi application.rb he configurado pdfkit como tal:

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

También he añadido esto a mi archivo layouts / application.html.erb:

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


He ejecutado con éxito PDFKit en Rails 3.1. Aunque he usado una configuración diferente .

Al principio tuve el mismo problema que tenía, pero eso se debía a que stylesheet_link_tag tiene un conjunto predeterminado en media => "screen" ; especificando explícitamente media => "all" arregló.


He usado la gema ''wicked_pdf'' y sus ayudantes para incluir CSS en las páginas. Internamente, los ayudantes simplemente leen todos los archivos CSS e incluyen en la página. Entonces, si prefiere usar PdfKit, intente investigar cómo incluir hojas de estilo no en línea.


Para mi fue problema con la instalación de ubuntu. Acabo de volver a instalar desde la fuente:

# 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

Y todo funciona ahora para mí. Así que mi consejo es que no instale wkhtmltopdf con este comando sudo apt-get install wkhtmltopdf e instálelo desde fuentes. instructions completas para el proceso de instalación


Robar un par de líneas del código de middleware que se encuentra en https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb

Puedes usar:

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

Mi ejemplo es:

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)


Sé que está buscando una solución que represente toda la página, solo un recordatorio para buscar en Google que todavía hay una solución sin problemas

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

ahora el pdf.css debe ser css, por lo que teóricamente, si necesitas cargar Sass, cárgalo de público / activo / precompilado


También me encontré con este problema, y ​​parece que cuando se agregó el canal de activos en Rails 3.1, pdfkit tiene un problema con los enlaces de la hoja de estilo. Vea el problema de GitHub sobre este problema.

Terminé cambiando a wicked_pdf y estoy muy contento con eso. Resolvieron este problema y funciona bien en Rails 3.2.x (no he probado 3.1.x).