La impresión de un PDF en cualquier impresora se puede automatizar con un bot de Telegram. En este post te mostraré el código fuente y la configuración de un Bot de Telegram para imprimir un PDF desde cualquier lugar en cualquier impresora.
Gracias a esto vas a poder enviarle un PDF (como archivo) al Bot y el documento será impreso en la impresora seleccionada por el usuario, todo en una misma computadora. El Bot también permite impresión de PDF a partir de una URL.
Lo bueno de todo esto es que vas a poder imprimir desde cualquier dispositivo y lugar del mundo, ya que el Bot estará escuchando a cuando reciba un mensaje de cualquier usuario.
Veamos cómo funciona este Bot de Telegram que permite imprimir un PDF de manera automatizada e instantánea en cualquier impresora.
Código fuente del Bot
Comencemos hablando del código que hace que el Bot de Telegram pueda imprimir un PDF enviado por cualquier usuario. El código completo está en: https://github.com/parzibyte/telegram-bot-pdf-print
La configuración del Bot y obtención del token es tu responsabilidad. En Telegram, habla con el BotFather para crear un Bot y que te proporcione el token. Esto es totalmente gratis y cualquiera puede hacerlo, incluso sin conocimientos de programación.
Guarda el token ya que lo vas a necesitar más tarde.
Necesitas contar con Node y NPM instalados. Cuando tengas el código fuente extraído en tu computadora abre una terminal, navega a la carpeta y ejecuta:
npm install
Después, crea un archivo llamado .env
basándote en .env.example
y coloca el token del Bot en TELEGRAM_BOT_TOKEN
Una vez que hayas creado el archivo .env
guarda los cambios y ejecuta:
node index.js
Con eso habrás ejecutado el Bot correctamente. Ahora ve a Telegram y envíale un mensaje que diga /version
, debe aparecer “fetch failed”, lo que indica que el Bot ya está en ejecución. Si no te devuelve ningún mensaje, asegúrate de seguir los pasos anteriores.
Nota importante: el Bot debe ser ejecutado en la computadora donde se encuentra conectada la impresora físicamente. Después de eso puedes enviar PDF a imprimir desde cualquier parte del mundo y dispositivo para que se impriman en la computadora donde el Bot se está ejecutando.
Herramienta para imprimir PDF
Ya has completado el primer paso: la ejecución del Bot de Telegram, pero el Bot por sí mismo no puede imprimir los documentos. Vamos a necesitar 2 herramientas adicionales:
plugin_pdf_prod_32.exe
oplugin_pdf_prod_64.exe
el cual se descarga en: https://github.com/parzibyte/plugin-silent-pdf-print-examples/releases/latestPDFtoPrinter.exe
el cual se descarga en: https://mendelson.org/pdftoprinter.html o en https://github.com/emendelson/pdftoprinter/blob/main/PDFtoPrinter.exe?raw=true
Nota: ninguna de las herramientas contiene malware, aunque los antivirus o sistemas lo detecten como tal. Es tu responsabilidad obligar al sistema a confiar en los programas y de ser necesario agregarlos a las excepciones.
También he notado que en ocasiones el navegador bloquea la descarga; de nuevo, es tu responsabilidad forzarla.
Una vez descargados, ejecuta plugin_pdf_prod_32.exe
o plugin_pdf_prod_64.exe
y deja a PDFtoPrinter.exe
en el mismo directorio donde se encuentra el archivo que has ejecutado.
Probando plugin
Hasta este momento el Bot de impresión de PDF debe estar en ejecución así como el Plugin para PDF (mismo que no abre ninguna ventana). Vuelve a enviar el mensaje /version
al Bot y debe responder con lo siguiente:
Si el mensaje “fetch failed” sigue apareciendo, asegúrate de haber ejecutado el plugin PDF y de que no hay ningún otro programa ejecutándose en el puerto 8080.
En caso de que aparezca el mensaje de la imagen, ya has configurado todo para poder imprimir documentos PDF desde Telegram.
Configurando impresora predeterminada
La impresora predeterminada se guarda por cada usuario, así que cada usuario puede imprimir en una impresora distinta al enviar el PDF al Bot de Telegram.
Si envías un PDF o un enlace de PDF al Bot y no has seleccionado una impresora, el Bot te pedirá que configures una. Este paso solo se tiene que hacer una vez, ya sea por recomendación del Bot o enviando el mensaje /impresoras
y eligiendo alguna de la lista:
Puedes invocar ese menú cuando lo prefieras, así puedes seleccionar tu impresora preferida. Esto se guarda permanentemente y puede ser cambiado en cualquier momento ya sea desde el Bot o mirando el archivo impresoras.json
.
Imprimir PDF enviando documento al Bot
Finalmente, después de tanta configuración, llegamos a la impresión del PDF desde el Bot. Lo bueno de esto es que solo tienes que configurar el Bot y descargar las herramientas una vez, y después todo será automático.
Primero veamos cómo imprimir un PDF enviado como documento. En este caso la captura es de mi teléfono Android y el PDF será impreso en la impresora que seleccioné en el Bot en la computadora donde se ejecuta:
Como puedes ver, no importa la plataforma desde donde envíes el PDF, al final el mismo será impreso con el Bot de Telegram. Así puedes imprimir PDF en una impresora remota (desde cualquier parte del mundo) desde un iPad, Android, PC, Mac, Linux, etcétera; donde sea que se ejecute Telegram, incluso desde la web.
Nota: si envías una descripción (caption) al momento de enviar el documento, se tomará como el nombre de la impresora y tomará precedencia a la impresora predeterminada. Si lo dejas vacío, se imprimirá en la impresora predeterminada.
PDF a partir de URL
El Bot también soporta la impresión de un PDF a partir de una URL. Basta con enviarle dicha URL para que el Bot descargue e imprima dicho documento:
Más opciones
El Bot puede hacer muchas más cosas si lo modificas correctamente. Actualmente el plugin soporta la impresión de PDF como documento, como documento existente en la computadora, en base64 y también se puede crear en tiempo real a partir de una cadena HTML, pero no encontré la manera amigable de colocar esa opción en el Bot.
Puedes solicitarme modificaciones para que el Bot permita hacer más cosas, al final del post encontrarás mis datos de contacto. Recuerda que el mismo es open source, así que puedes modificarlo por ti mismo y analizar su comportamiento.
He escrito más tutoriales con este plugin, mismos que puedes leer en: https://parzibyte.me/blog/category/plugin-pdf/
Manejo de errores
A continuación describo algunos posibles errores. Si hay un error, el Bot te lo dirá indicando el mensaje de error.
- Error: fork/exec PDFtoPrinter.exe: The system cannot find the file specified. No has descargado PDFtoPrinter.exe o no lo has colocado en la misma ubicación donde se encuentra el plugin
- fetch failed: el plugin no se está ejecutando
- Error: error al descargar el PDF de la url. Compruebe la URL y si el PDF está expuesto públicamente. El error es: el archivo que se intenta descargar no es un PDF pues su contentType es ‘content-type’ y debería ser uno de ‘[application/pdf application/octet-stream]’. La respuesta, que no es un PDF, es: la URL que enviaste no es un PDF o no está servida correctamente. En el servidor, debes servir ese PDF con el encabezado application/pdf o application/octet-stream. Visita la URL y revisa si está expuesta públicamente además de permitir bots en tu servidor.
- “Read: xRefTable failed: pdfcpu: can’t find last xref section”: el PDF que intentas imprimir no es compatible con el plugin, ya que el PDF tiene una versión que no es compatible con el plugin