Muchas veces nos encontramos con un servidor de ficheros con cantidad de ficheros .pdf, algunos con resoluciones desproporcionadas.
A continuación, disponemos de un vídeo realizado por @polpadrisa donde se explica el funcionamiento de un bat que reduce la calidad de las imágenes de los pdf para que pesen menos.
Podéis examinar y suscribiros al canal de Youtube de SYSADMIT en el siguiente enlace:
https://www.youtube.com/c/SYSADMIT
y aquí tenéis el contenido del post con el detalle y enlaces:
A continuación, disponemos de un vídeo realizado por @polpadrisa donde se explica el funcionamiento de un bat que reduce la calidad de las imágenes de los pdf para que pesen menos.
Podéis examinar y suscribiros al canal de Youtube de SYSADMIT en el siguiente enlace:
https://www.youtube.com/c/SYSADMIT
y aquí tenéis el contenido del post con el detalle y enlaces:
En entornos empresariales se suele utilizar impresoras multifunción para escanear documentos.
Una recomendación es tener muy bien configuradas las impresoras para que escaneen con una resolución óptima, es decir, con una resolución proporcionada entre el fin del documento y el espacio que ocupará el fichero.
Aún disponiendo de todas las impresoras perfectamente configuradas, los fileservers acaban llenos de ficheros pdf de alta resolución.
Una solución para aquellos pdf que no contengan macros o formularios, es decir, aquellos pdf que han sido mayormente escaneados y de los que solo se mantienen en el servidor a título de copia es comprimirlos.
El formato PDF ya de por si es un formato comprimido pero suele suceder que entre documentos no se ha aplicado el mismo nivel de compresión.
Con el script que veremos a continuación, podemos unificar masivamente el nivel de compresión de los pdf de una carpeta.
Una recomendación es tener muy bien configuradas las impresoras para que escaneen con una resolución óptima, es decir, con una resolución proporcionada entre el fin del documento y el espacio que ocupará el fichero.
Aún disponiendo de todas las impresoras perfectamente configuradas, los fileservers acaban llenos de ficheros pdf de alta resolución.
Una solución para aquellos pdf que no contengan macros o formularios, es decir, aquellos pdf que han sido mayormente escaneados y de los que solo se mantienen en el servidor a título de copia es comprimirlos.
El formato PDF ya de por si es un formato comprimido pero suele suceder que entre documentos no se ha aplicado el mismo nivel de compresión.
Con el script que veremos a continuación, podemos unificar masivamente el nivel de compresión de los pdf de una carpeta.
Script de compresión masiva de pdf:
El script utiliza dos herramientas: Ghostscript y PDFInfo.
Al final del documento, encontraremos el script y podremos hacer "copiar-pegar" del mismo.
Veamos cómo funciona:
Comprimir PDF masivamente: Herramienta: Ghostscript:
Tenemos que descargar el instalador:
Ghostscript: Postscript and PDF interpreter/renderer:
https://www.ghostscript.com/download/
Nos situamos en la sección: “Postscript and PDF interpreter/renderer” y lo bajamos des de cualquier mirror, teniendo en cuenta si queremos la versión de 32 o 64 bits.
Una vez descargado ejecutamos el asistente de instalación:
Abrimos:
%programfiles%\gs\gs9.21\bin
Siendo gs9.21 la versión de ghostscript instalada.
Seleccionamos los 3 ficheros:
Seleccionamos los 3 ficheros:
gsdll64.dll
Gsdll64.lib
Gswin64c.exe
Gsdll64.lib
Gswin64c.exe
Y los copiamos a la carpeta c:\SYSADMIT\CompressPDF\ghostscript
Desde cmd:
mkdir c:\SYSADMIT\CompressPDF\ghostscript
xcopy %programfiles%\gs\gs9.21\bin\gsdll64.dll c:\SYSADMIT\CompressPDF\ghostscript
xcopy %programfiles%\gs\gs9.21\bin\gsdll64.lib c:\SYSADMIT\CompressPDF\ghostscript
xcopy %programfiles%\gs\gs9.21\bin\gswin64c.exe c:\SYSADMIT\CompressPDF\ghostscript
Comprimir PDF masivamente: Herramienta: PDFInfo:
Lo descargamos y descomprimimos. Una vez descomprimido navegamos hasta la carpeta bin64 (o bin32) y copiamos el fichero pdfinfo.exe en la carpeta: C:\SYSADMIT\CompressPDF\pdfinfo
En cmd:
mkdir c:\SYSADMIT\CompressPDF\pdfinfo
xcopy pdfinfo.exe c:\SYSADMIT\CompressPDF\pdfinfo
Y ya tendremos todos los componentes para ejecutar el compresor.
Comprimir PDF masivamente: Personalización del script:
Hay 4 variables que debemos personalizar:
rutaDirPdfs="C:\SYSADMIT\pdf" En esta variable debemos escribir la ruta de la carpeta dónde están los PDF que queremos comprimir. Ojo: el bat va a buscar los ficheros pdf de esta carpeta de forma RECURSIVA.
pdfSettings="/ebook" Esta variable establece el nivel de compresión:
REM /screen (screen-view-only quality, 72 dpi images)
REM /ebook (low quality, 150 dpi images)
REM /printer (high quality, 300 dpi images)
REM /prepress (high quality, color preserving, 300 dpi imgs)
REM /default (almost identical to /screen)
rutaGhostScript= Igual que la anterior pero con el fichero: gswin64c.exe.
Notas y aclaraciones:
REM /printer (high quality, 300 dpi images)
REM /prepress (high quality, color preserving, 300 dpi imgs)
REM /default (almost identical to /screen)
Según la ayuda de la aplicación de postscript: Normalmente la mejor opción será: "ebook" ya que está en el límite en el que las imágenes pixelan pero son legibles.
Si no queremos que las imágenes pixelen podemos optar por /printer.
Cuanto menos DPI (dots per inch), menos pesará el pdf, es decir, quedará más comprimido pero se verá peor.
Debemos jugar con estos valores y ver cual se adapta mejor a nuestra situación.
rutaPdfInfo= Aquí estableceremos la ruta del fichero: pdfinfo.exe descargado de la web de Xpdf. En principio, el bat, busca el ejecutable por defecto en: ruta_del_propio_bat\pdfinfo.exe.
Notas y aclaraciones:
Este script (bat) y toda la información incluida en él se proporciona "tal cual", sin garantía de ningún tipo, ya sea explícita o implícita.
Tened en cuenta que comprime de forma RECURSIVA el contenido del directorio y que SOBRESCRIBE los ficheros originales sin hacer ningún tipo de backup.
Recomendamos encarecidamente copiar los archivos en una carpeta de sandbox, ejecutar el script y comprobar los resultados.
No ejecutéis nunca el script en entornos de producción sin hacer las pruebas previas y sin verificar si se dispone de una copia de seguridad al día.
No hemos probado el script con PDF con macros, formularios, programación, etc. La ejecución del script, podrían dejarlos corruptos o inservibles.
Comprimir PDF masivamente: SCRIPT
@echo off REM Ruta directorio dónde hay los pdf a comprimir (es recursivo!): set rutaDirPdfs="C:\SYSADMIT\pdf" REM Nivel de compresión: REM /screen (screen-view-only quality, 72 dpi images) REM /ebook (low quality, 150 dpi images) REM /printer (high quality, 300 dpi images) REM /prepress (high quality, color preserving, 300 dpi imgs) REM /default (almost identical to /screen) set pdfSettings="/ebook" REM Otras variables set rutaPdfInfo=%~dp0\pdfinfo\pdfinfo.exe set rutaGhostScript=%~dp0\ghostscript\gswin64c.exe set batFile=%~nx0 SET myPath=%~dp0 for /f "tokens=1-5 delims=/ " %%d in ("%date%") do set fecha=%%f-%%e-%%d set logFile=%mypath%\%computername%-%batFile:~0,-4%-%fecha%.log ( echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo INICIO Log de %COMPUTERNAME% Date /T Time /T echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo. echo. )>> %logfile% 2>>&1 cd %rutaDirPdfs% for /r %%f in (*.pdf) do ( set fichero=%%f call :TEST ) REM volvemos a casa cd %myPath% exit /b :TEST echo %fichero% %rutaPdfInfo% %fichero% | find /i "Producer" | find /i "Ghostscript" if not errorlevel 1 ( echo. echo fichero ya procesado con Ghostscript echo. ) else ( call :COMPRESS ) exit /b :COMPRESS copy "%fichero%" temp.pdf for %%A in ("%fichero%") do set PesoInicial=%%~zA bytes %rutaGhostScript% -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=%pdfSettings% -dNOPAUSE -dBATCH -sOutputFile="%fichero%" temp.pdf del temp.pdf /q for %%A in (%fichero%) do set PesoFinal=%%~zA bytes echo %fichero% %PesoInicial% -^> %PesoFinal% >> %logfile% 2>>&1 echo %fichero% %PesoInicial% -^> %PesoFinal% echo. echo. exit /b ( echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo FIN Log de %COMPUTERNAME% Date /T Time /T echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo. echo EOF )>> %logfile% REM --FIN--
Hola buenas tardes quise utilizar este método en la máquina d mi trabajo pero tiene muchas restricciones y no me deja colocar los programas externos ay forma de usar este script sin esos programas
ResponderEliminarHola,
EliminarEl script requiere los programas externos para poder hacer la compresión.
Un saludo,
Xavi.