InicioLinuxCrear PDF en Django y Virtualenv, y no morir en el intento.

Crear PDF en Django y Virtualenv, y no morir en el intento.

Linux5/29/2013
Hoy he estado luchando con la generacion de un pdf de calidad en Django, utilizaba la libreria xhtml2pdf y Pisa, pero tengo problemas de renderizado, al ser el mismo quien renderiza el css y el html, a veces no lo hace de manera correcta. Asi que me toco buscar una libreria que pudiera hacer ese trabajo, y me encontre con wkhtmltopdf, excelente propuesta, la trabaje en el servidor de desarrollo y perfecto, pero cuando pase mi proyecto a mi servidor de deployment... adios tranquilidad por un dia... un dia largo de busqueda por internet a ver que problemas hay... he aqui todo el procedimiento, para que ustedes no sufran lo que yo sufri jejeje

1.) Primero instalar la libreria wkhtmltopdf que hace renderizado con qt webkit, asi que tambien necesitamos algunas dependencias... comenzamos con la instalacion:

apt-get build-dep libqt4-gui libqt4-network libqt4-webkit
apt-get install openssl build-essential xorg git-core git-doc libssl-dev wkhtmltopdf


2.) Sobre su virtualenv, deben instalar una libreria wrapper de wkhtmltopdf para django, el cual podemos hacer con PIP.
$pip install django-wkhtmltopdf

o descargarlo desde github con este enlace e instalarlo https://github.com/incuna/django-wkhtmltopdf y hacer la instalacion manual como alli lo dicen.

luego se hace la integracion a django, en las INSTALED_APPS. En la misma pagina de github os diran como integrarlo a su proyectos.

DE AQUI en adelante, os funcionara perfecto en el desarrollo, pero valla dolor de cabeza causara cuando lo pasen al servidor de deploy, donde deben hacer lo mismo.

El primer error es un bug que fue resuelto en git, con agregar unas lineas de codigo en el archivo utils.py de django-wkhtmltopdf. Aqui pueden modificar directamente el instalado (como me toco a mi), o si descargaste e instalaste de github, antes de instalarlo en el servidor, deberias ver si ya tiene el parche. Es el siguiente:

utils.py:

(ln 86) - return check_output(args, stderr=sys.stderr, env=env)
(ln 87)+ try:
(ln 88)+ return check_output(args, stderr=sys.stderr, env=env)
(ln 89)+ except AttributeError:
(ln 90)+ return check_output(args, env=env)


(agregar las lineas con +, eliminar las que encuentren con -, sin colocar las lineas, son meramente para guiarlos)

si no encuentran los archivos de django-wkhtmltopdf donde se encuentran deberian estar aqui...

$HOME/.virtualenvs/tu_virtualenv/lib/python2.7/site-packages/wkhtmltopdf/

listo, con esto ya no da error cuando se hace deploy, en este caso lo hacia con apache. si bien en un servidor no se mantiene un xserver dentro de un servidor, ni tener un Desktop Enviroment, ya que eso significa gasto de memoria innecesaria, para poder renderizar el pdf es necesario tener un servidor x corriendo, por lo cual en el servidor hay que hacer estos cambios.

1.) instalar xorg, pero no hacer configuracion para que inicie automaticamente, por el contrario lo que haremos es instalar un servidor "virtual" para xorg.

apt-get install xorg xbfv

2.) Esperar, al terminar de instalar, debemos hacer un cambio, primero modificaremos el nombre del ejecutable de wkhtmltopd.
(si no encuentran donde esta el ejecutable pueden averiguarlo con whereis).

sudo mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf.unwrapped

luego crear un script con este contenido con el nombre del ejecutable inicial wkhtmltopdf.

#!/bin/sh
xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf.unwrapped $*


este archivo lo movemos hacia donde se encontraba el ejecutable
sudo cp wkhtmltopdf /usr/bin/

y woala... ya el servidor debe crear un servidor "virtual" de Xorg mientras se ejecuta nuestra libreria, y genera el pdf. espero les sirva muchisimo.
Datos archivados del Taringa! original
19puntos
253visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

M
Minrock🇦🇷
Usuario
Puntos0
Posts3
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.