Convertir HTML a PDF por línea de comandos

Coincide que en los proyectos que tengo para dos clientes diferentes necesito hacer la misma cosa: generar un PDF con datos personalizados. En un caso son facturas y en otro contratos.

Hasta ahora cuando necesitaba hacer un PDF usaba la librería de PHP FPDF, que está bastante bien, pero hay una alternativa mucho más sencilla: wkhtml2pdf.

Es importante que si vamos a usarlo en un servidor de producción, que no tiene servidor de ventanas, nos descarguemos la versión estática. Una vez instalado el proceso es tan sencillo como:

  1. Copiar el documento HTML base para tenerlo con el nombre que queramos.
  2. Modificarlo con PHP para incluir la información personalizada.
  3. Ejecutar wkhtml2pdf fichero.html fichero.pdf

Crear ventana de Chrome sin interfaz de usuario

Cuando estoy desarrollando para hive.ly me viene muy bien tener dos usuarios para comprobar interacciones, notificaciones, etc… Uno de ellos lo tengo en la ventana oficial de Chrome, a pantalla completa y con las herramientas de desarrollador en el otro monitor. El otro usuario lo tengo con una ventana de incógnito (para no interferir con las credenciales del usuario oficial) y no quiero que ocupe mucho, con un tamaño como el de un móvil pequeño me sirve.

En estos casos lo ideal es que la ventana de Chrome no tenga la barra de direcciones, ni las pestañas ni nada de nada, así ocupa lo mínimo imprescindible. Para conseguir esto abro la consola y escribo:

/opt/google/chrome/chrome --app=http://hivo --incognito

Con esto se consigue una ventana de Chrome sin interfaz de usuario, que puedo redimensionar y dejar en una esquina siempre visible.

Eliminar el cansino mensaje “Token mismatch” en phpMyAdmin

ATENCIÓN: esto solamente debe hacerse en instalaciones de phpMyAdmin de desarrollo local, nunca en un phpMyAdmin en un servidor de producción.

En el servidor local que uso para desarrollo tengo instalado phpMyAdmin y estaba ya hasta el gorro del mensaje “Error: token mismatch” que aparece cuando pasa un tiempo sin que hagas ninguna operación con él.

La solución más rápida que he encontrado para esto es abrir el fichero /libraries/common.inc.php (en mi equipo instalé phpMyAdmin con apt-get y está en /usr/share/phpmyadmin/libraries/common.inc.php), buscar este código

$token_mismatch = true;
if (PMA_isValid($_REQUEST['token'])) {
    $token_mismatch = ($_SESSION[' PMA_token '] != $_REQUEST['token']);
}

y cambiarlo por:

$token_mismatch = false;
/*if (PMA_isValid($_REQUEST['token'])) {
    $token_mismatch = ($_SESSION[' PMA_token '] != $_REQUEST['token']);
}*/

Así, a lo burro. Pero como es un servidor local al que no se puede acceder desde fuera el riesgo de seguridad que conlleva se puede asumir.

Recompilar gnome-screenshot para quitar los dos puntos del nombre del fichero de captura

gnome-screenshot es el programa para hacer capturas de pantalla en Linux Mint, pero tiene un problema: los ficheros que genera se guardan con un nombre que contiene la hora, minutos y segundos separados por : y esto da problemas si se quieren utilizar en Windows.

No hay ninguna opción en el programa para configurar esto, pero por suerte estamos en el mundo del código libre, donde si algo no te gusta de un programa puedes modificar el código fuente y dejarlo a tu gusto. Así que este es el proceso para recompilar gnome-screenshot y cambiar el nombre de los ficheros que genera.

Instalamos unos paquetes que nos harán falta para poder compilar:

sudo apt-get install gnome-common libxext-dev libcanberra-gtk3-dev

Descargamos el código fuente y lo descomprimimos:

wget https://git.gnome.org/browse/gnome-screenshot/snapshot/gnome-screenshot-3.4.1.tar.gz
tar -xf gnome-screenshot-3.4.1.tar.gz

Nos vamos al fichero src/screenshot-filename-builder.c, línea 126, y la cambiamos por esta:

timestamp = g_date_time_format (d, "%Y-%m-%d_%H-%M-%S");

Y lo recompilamos. Desde la raíz de la carpeta del código ejecutamos (quizá haya algún paso innecesario o duplicado, pero prefiero copiar todo lo que hice y me funcionó):

./configure
autoreconf --install
intltoolize --force
autoreconf
./configure
make
sudo make install

Os doy permiso… ¿O no?

Hoy he recibido un email de una conocida red social. Sí, voy a ser tan pedante como los informativos de la tele. Resulta que han seleccionado unas fotos de las que subí en su día a esa cosa y han hecho un “vídeo” con lo que llaman el “Día de la amistad”.

Dejando a un lado la cursilería repulsiva del vídeo en cuestión y la música totalmente opuesta a mis gustos, supongo que cuando me dí de alta autoricé a esta gente a generar aberraciones como la que me proponen.

FML… Por suerte queda poco para hive.ly…

Desactivar la opción “Upload open files” en el plugin SFTP de Sublime Text 3

Una de las cosas que me encanta de Sublime Text es la cantidad de plugins que tiene. Uno de ellos es Sublime SFTP, que permite subir y bajar ficheros por FTP directamente desde el Sublime Text.

Sin embargo hay una cosa que no me gusta de este plugin: en el menú contextual las opciones de subir fichero (que sube al servidor el fichero actual) y subir los ficheros abiertos (que sube todos los ficheros que tengamos abiertos) están seguidas, lo que hace que a veces seleccionemos la segunda en vez de la primera. Esto me ha pasado ya un par de veces y por suerte sin consecuencias, pero puede haber ocasiones en las que subir todos los ficheros que estamos editando pueda causar problemas.

Para solucionar esto lo más sencillo es modificar el menú contextual y mover la opción de subir los ficheros abiertos más abajo. Abrimos la carpeta de los paquetes (Preferences -> Browse Packages) y entramos en la carpeta SFTP. Allí encontraremos el fichero Context.sublime-menu, en el que simplemente moveremos la línea

{ "caption": "Upload Open Files", "command": "sftp_upload_open_files" },

a cualquier otra parte. Yo la he puesto debajo de la opción Browse remote.

SiteInfo – Una clase para obtener información de una web

Trabajando en la sección de links de hive.ly necesitábamos obtener una imagen de los enlaces que suben los usuarios. He hecho una pequeña clase de PHP que obtiene algunos datos de una URL que se le proporcione, entre ellos una imagen. Primero se buscan imágenes grandes (como las de las etiquetas OpenGraph) y si no imágenes de MS, Twitter o iconos de Apple.

La clase es gratuita y está disponible en Github.

Efecto de bote para iconos

Hace mucho tiempo probé una distribución de GNU Linux (no recuerdo cuál) que usaba KDE como entorno de escritorio, y me hizo mucha gracia que al iniciar un programa aparecía al lado del cursor el icono de la aplicación botando.

Lo implementé en su momento en mi entorno de ventanas para aplicaciones web, para indicar al usuario que la aplicación se estaba cargando, y ahora como he visto que llevaba un tiempo sin publicar nada de código libre he decidido subirlo a GitHub.

Así que presento al mundo bouncingIcon, una función muy sencilla que permite poner a botar un icono (bien fijo en una esquina, bien siguiendo al cursor como hacía KDE) que le indique al usuario que se está realizando una operación en la página. El repositorio de GitHub es https://github.com/koas/bouncingIcon y la página de demo para verlo funcionar es http://koas.github.io/bouncingIcon/

Espero que le resulte útil a alguien.