Instalar pdfkit rails en ubuntu 12.04

Publicado el 18 diciembre 2013 por Godieboy @godi

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