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