Crear una impresora virtual PDF y compartirla en red es muy sencillo con GNU/Linux y Samba. Aunque la mayoría de las nuevas aplicaciones suele tener un "Exportar a PDF", en ocasiones, sobretodo con equipos o aplicaciones viejas dicha opción no es posible. Con Samba, podremos crear una impresora virtual, compartirla en nuestra red e imprimir a PDF desde cualquier equipo que admita un driver genérico de PostScript.
Seguid leyendo y os enseñaré como montar un servidor de que imprima ficheros a PDF y los guarde en el $HOME de los usuarios...
¿QUÉ ES SAMBA?
Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que computadoras con GNU/Linux, Mac OS X o Unix en general se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo de Controlador Principal de Dominio (PDC), como miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autentificar con su propio archivo de usuarios.
Entre los sistemas tipo Unix en los que se puede ejecutar Samba, están las distribuciones GNU/Linux, Solaris y las diferentes variantes BSD entre las que podemos encontrar el Mac OS X Server de Apple.
Una Fake Printer es una impresora falsa que convierte los ficheros a otro formato
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- PC con GNU/Linux y Samba instalado y funcionando
- PC Windows cliente
- Conexión a Internet
2.- PREREQUISITOS
En este tutorial no se van a detallar los pasos para instalar y configurar Samba en el equipo con GNU/LINUX. Si necesitáis un tutorial paso a paso aquí tenéis uno que escribí hace unos días: Cómo instalar y configurar SAMBA en GNU/LINUX Debian
3.- INSTALACIÓN DE PS2PDF
Para poder convertir los ficheros que lleguen a la "Fake Printer" de Samba, necesitamos tener instalado el binario ps2pdf. Para instalar ps2pdf en GNU/Linux Debian o Ubuntu ejecutaremos el siguiente comando:
raul@debian:~$ sudo apt-get install ghostscript
4.- INSTALAR Y CONFIGURAR PDFPRINT.SH
Debemos descargar un pequeño script de bash que será el encargado de ejecutarse a través de Samba y que ejecutará ps2pdf para convertir los Postscript (ficheros para imprimir) que enviemos desde el cliente a formato PDF. Descargaremos el fichero de la siguiente dirección: https://wiki.samba.org/index.php/File:Pdfprint.sh.txt o tambien dejo al final de este post una copia del script. Lo descargaremos en /usr/local/bin/ , le quitaremos la extensión txt y ejecutaremos el siguiente comando para darle permisos de ejecución:
raul@debian:~$ sudo chmod 755 /usr/local/bin/Pdfprint.sh
5.- CONFIGURAR LA IMPRESORA PDF EN SAMBA
Como queremos guardar los PDFs en el directorio $HOME del usuario, debemos tener los $HOMES de los usuarios compartidos para que puedan descargarse los PDFs impresos por red:
[Homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0644
directory mask = 0755
valid users = %S
Para añadir la impresora virtual PDF, al final del fichero /etc/samba/smb.conf, debemos añadir las siguientes líneas. Con esta configuración, los PDFs se guardarán en el directorio /home/<usuario>/Documentos/. Recordad, que esta configuración solo funciona para usuarios que tengan $HOME en el servidor. Con una pequeña variación podemos hacer que todo el mundo pueda imprimir y los PDFs se dejen en un recurso público accesible por todos, pero en este casi lo haré solo para usuarios de sistema:
[PDFprinter]
comment = Samba Virtual PDF Printer
printing = LPRNG
path = /var/spool/samba
printable = yes
public = no
lpq command =
lprm command =
print command = /usr/local/bin/Pdfprint.sh -s %f -d /home/%U/Documentos -o %U -m 600 -l /tmp/Pdfprint.log
Para aplicar los cambios, reiniciaremos el servidor de Samba:
raul@debian:~$ sudo service smbd restart
6.- CONFIGURACIÓN DE LOS CLIENTES WINDOWS
Configurar los equipos clientes Windows es muy sencillo. Desde el explorador de ficheros, haciendo click en Red, veremos la impresora compartida llamada PDFPrinter:
Impresora PDF a través de red
Con el botón derecho, haremos click y seleccionaremos "Conectar...":
Conectar la impresora
Como no tenemos instalador drivers para la impresora, obtendremos un mensaje de error:
Error: Controlador no encontrado
Instalaremos un driver genérico PostScript. En este caso, he seleccionado el driver de HP de Postscript de la impresora HP Color LaserJet 2800 Series PS:
Instalar controlador genérico PostScipt
Una vez instalados los drivers, en el listado de "Impresoras y faxes" veremos la impresora añadida y marcada como por defecto:
Listado de impresoras y faxes
Ahora, realizaremos una prueba de impresión. Abriremos un navegador con una página Web y la imprimiremos a PDF:
Imprimir página web
Seleccionaremos la impresora PDFprinter y haremos click en "Imprimir":
Configuración de impresión
Si revisamos el fichero de logs (/tmp/Pdfprinter.log) en el servidor, veremos que efectivamente el fichero se ha convertido correctamente y se ha guardado en el $HOME del usuario raul:
raul@debian:~$ cat /tmp/Pdfprint.log
jun 11 10:07:59 Successfully converted "smbprn.7zww7i" to "/home/raul/Documentos/Samba_PDF_Printer_2020-06-11_10-07-56.pdf".
Una vez imprimido el fichero, se guardará en el $HOME del usuario:
PDF generado
En la siguiente imagen se puede ver la página web impresa a PDF:
Fichero PDF
ENJOY!