Me gustaría transformar un pdf con texto en color e imágenes en otro pdf solo en blanco y negro, para reducir sus dimensiones. Además, me gustaría mantener el texto como texto, sin transformar los elementos de las páginas en imágenes. Intenté el siguiente comando:
convert -density 150 -threshold 50% input.pdf output.pdf
encontré en otra pregunta, un enlace , pero hace lo que no quiero: el texto en la salida se transforma en una imagen pobre y ya no es seleccionable. Lo intenté con Ghostscript:
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
pero me da el siguiente mensaje de error:
./script.sh: 19: ./script.sh: output.pdf: not found
¿Hay alguna otra forma de crear el archivo?
bash
pdf
imagemagick
ghostscript
color-management
BowPark
fuente
fuente
Respuestas:
El ejemplo de gs
El
gs
comando que está ejecutando arriba tiene un final$1
que generalmente está destinado a pasar argumentos de línea de comando a un script. Así que no estoy seguro de lo que realmente intentaste, pero supongo que intentaste poner ese comando en un scriptscript.sh
:Y ejecútelo así:
No estoy seguro de cómo configurar este script, pero debe ser ejecutable.
Sin embargo, algo definitivamente no parece correcto con ese script. Cuando lo probé, recibí este error:
Una alternativa
En lugar de ese script, usaría este de la pregunta SU en su lugar.
Luego ejecútelo así:
fuente
sProcessColorModel
que debería serdProcessColorModel
en su lugar.Encontré un script aquí que puede hacer esto. Requiere
gs
lo que pareces tener pero tambiénpdftk
. No ha mencionado su distribución, pero en los sistemas basados en Debian, debería poder instalarla conPuede encontrar RPM para ello aquí .
Una vez que haya instalado
pdftk
, guarde el script comograypdf.sh
y ejecútelo así:Creará un archivo llamado
input-gray.pdf
. Incluyo todo el script aquí para evitar la descomposición del enlace:fuente
También tenía algunos archivos PDF en color escaneados y archivos PDF en escala de grises que quería convertir a bw. Intenté usarlo
gs
con el código que se muestra aquí , y la calidad de imagen es buena con el texto en PDF todavía allí. Sin embargo, ese código gs solo se convierte en escala de grises (como se preguntó en la pregunta) y todavía tiene un gran tamaño de archivo.convert
produce resultados muy pobres cuando se usa directamente.Quería archivos PDF con buena calidad de imagen y tamaño de archivo pequeño. Habría intentado la solución de terdon, pero no pude acceder
pdftk
a centOS 7 usando yum (al momento de escribir).Mi solución se utiliza
gs
para extraer archivos bmp en escala de grises del pdf,convert
para limitar esos bmps a bw y guardarlos como archivos tiff, y luego img2pdf para comprimir las imágenes tiff y combinarlas en un solo pdf.Intenté ir directamente a tiff desde el pdf, pero la calidad no es la misma, por lo que guardo cada página en bmp. Para un archivo pdf de una página,
convert
hace un gran trabajo desde bmp a pdf. Ejemplo:Para varias páginas,
gs
puede combinar varios archivos PDF en uno, peroimg2pdf
produce un tamaño de archivo más pequeño que gs. Los archivos tiff deben descomprimirse como entrada para img2pdf. Tenga en cuenta que para un gran número de páginas, los archivos intermedios bmp y tiff tienden a ser de gran tamaño.pdftk
ojoinpdf
sería mejor si pueden fusionar archivos PDF comprimidos deconvert
.Me imagino que hay una solución más elegante. Sin embargo, mi método produce resultados con muy buena calidad de imagen y un tamaño de archivo mucho más pequeño. Para recuperar el texto en bw pdf, ejecute OCR nuevamente.
Mi script de shell usa gs, convert e img2pdf. Cambie los parámetros (número de páginas, ppp de escaneo,% umbral, etc.) enumerados al principio según sea necesario, y ejecútelos
chmod +x ./pdf2bw.sh
. Aquí está el script completo (pdf2bw.sh):fuente
RHEL6 y RHEL5, que ambos Ghostscript de línea de base en 8.70, no podían usar las formas del comando dado anteriormente. Suponiendo que un script o una función espere que el archivo PDF sea el primer argumento "$ 1", lo siguiente debería ser más portátil:
Donde el archivo de salida tendrá el prefijo "grey_".
RHEL6 y 5 pueden usar CompatibilityLevel = 1.4, que es mucho más rápido, pero apuntaba a la portabilidad.
fuente
sColorConversionStrategyForImages
cambio.Obtengo resultados confiables al limpiar archivos PDF escaneados con un buen contraste con este script;
fuente