A veces se requiere crear pdfs apartir de los htmls según lo que paso aca, para que nuestras vistas en rails al acceder a ellas via .pdf algo asi como ventas/1.pdf por dar un ejemplo, solo con el hecho de instalar el pdfkit te ayuda con esa tarea, pero ojo como pdfkit utiliza wkhtmltopdf entonces primero se tiene que instalar esta libreria pero esta libreria a su vez requiere xserver entonces se tiene que instalar las librerias del cliente xserver bueno vamonos por pasos.
Primero instalar el xserver para esto ejecutamos esta linea
apt-get install xvfb
Ya con esto no saldra este error: wkhtmltopdf: cannot connect to X server
bueno ahora sigue instalar el wkhtmltopdf para esto hay 3 opciones segun la pagina oficial pero utilizaremos la de ubuntu por que somos cholos entonces ejecutamos
apt-get install wkhtmltopdf
Despues creamos un archivo que se llame wkhtmltopdf.sh en la carpeta /usr/bin/ que contenga el siguiente comando ‘xvfb-run –server-args=”-screen 0, 1024x768x24″ /usr/bin/wkhtmltopdf $*’
vi /usr/bin/wkhtmltopdf.sh xvfb-run --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf $*
Bueno las opciones son para que sea la pantalla 0, de resolucion 1025×768 de 24 pulgadas.
Guardamos y le asignamos permisos de ejecucion y creamos un link simbolico a /usr/local/bin/wkhtmltopdf:
chmod a+x /usr/bin/wkhtmltopdf.sh ln -s /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
y hacemos una prueba para ver si wkhtml quedo bien configurado
wkhtmltopdf http://www.google.com output.pdf
Ahora solo falta configurar el pdfkit esto esta mas facil, agregas al gemfile
gem 'pdfkit'
y ejecutas:
bundle install
En nuestro archivo application.rb agregamos estas lineas
require 'pdfkit' config.middleware.use PDFKit::Middleware
Tambien para modificar las opciones de pdfkit crea un archivo pdfkit.rb en la carpeta initializers de rails:
# config/initializers/pdfkit.rb PDFKit.configure do |config| config.wkhtmltopdf = '/path/to/wkhtmltopdf' config.default_options = { :page_size => 'Legal', :print_media_type => true } # Use only if your external hostname is unavailable on the server. config.root_url = "http://localhost" end
Listo reinicias el servidor y ya debería de funcionar.
Documentacion de pdfkit
Script de wkhtmltopdf
Cualquier duda en los comentarios.
Tweet