Permalink  Tekné

iconoConvertir imágenes de pdf a tiff con ghostscript

Usando ghostscript con la consola.

Para extraer una sola imagen de un pdf.

$ gs -r500x500 -sDEVICE=tiff24nc -dFirstPage=1 -dLastPage=1 -dBATCH -dNOPAUSE -sOutputFile=archivo.tif un_archivo.pdf

Explicación:
-r500x500 : Resolucion 500x500 px
-sDEVICE=tiff24nc : Saca un tif en RGB de 24-bit. Ver más opciones.
-dFirstPage y -dLastPage : La página donde se encuentra la imagen.
-dBATCH y -dNOPAUSE : Hacen que después de crear el tif finalice el programa.
-sOutputFile : Es el archivo de salida
Un_archivo.pdf : Es el pdf que contiene las imágenes.

También puedes probar con resoluciones mas altas como -r500x500, con esto saldrían tifs de unos 30MB cada uno.
Si quieres una imagen en CMYK 32-bit utiliza -sDEVICE=tiff32nc

Para extraer todas las imágenes de todas las páginas de un pdf:

$ gs -r300x300 -sDEVICE=tiff24nc -sOutputFile=imagenes/img_%03d.tif -dBATCH -dNOPAUSE archivo.pdf

Con esto tendremos en el directorio imagenes (previamente creado) tantos archivos tiff como páginas tenga el documento pdf ej: img_001.tif img_002.tif img_003.tif etc etc

Explicación:
-r300x300 : Resolucion de la imagen 300x300 px
-sDEVICE=tiff24nc : Saca un tif en RGB de 24-bit
-sOutputFile : Es el archivo de salida. Con %03d numera cada archivo de salida con 3 dígitos.
-dBATCH : Finaliza ghostscript después de procesar todas las páginas.
-dNOPAUSE : Desabilita pausa después de crear cada tif. finalice el programa
archivo.pdf : Es el pdf que contiene las imágenes.

BONUS:
Si es texto en imágenes puedes extraerlas en escala de grises y luego pasarlas por el ocr tesseract para convertirlas en un archivo de texto:

1.- Extraemos las imágenes y las guardamos en escala de grises a 500x500 de resolución.
$ gs -r500x500 -sDEVICE=tiffgray -sOutputFile=imagenes/ocr_%03d.tif -dBATCH -dNOPAUSE archivo.pdf

2.- Pasamos los archivos tif por el ocr tesseract
Para ello utilizamos un bucle en la consola:

$ for f in *.tif; do tesseract "$f" "salida/${f%}" -l spa; done

Esto nos crea en el directorio salida (previamente creado) archivos de texto con todos de todos los archivos tiff y los llama ocr_001.tif.txt ocr_002.tif.txt ocr_003.tif.txt etc etc

Usuarios de Ubuntu pueden instalarlo desde el synaptic, también hay que instalar tesseract-ocr-spa.

En el pdf que he utilizado las páginas vienen numeradas y el ocr me añade al final de cada archivo de texto una linea con la numeración de la página y otra linea en blanco que realmente me sobran.

3.- Para quitar las dos últimas líneas de cada archivo utilizamos sed:

$ sed -i -e '$d' *.txt

Esto te quita la última linea de todos los archivos con extensión txt en el directorio, en mi caso como quería quitar dos lineas pues lo he ejecutado dos veces.
Si quieres hacer una copia de los archivos originales utiliza -ibak en vez de -i

4.- Unimos todos los archivos de texto en uno solo con cat:

$ cat *.txt > salida.txt

El resultado final es un archivo de texto con el contenido del pdf.

Nota:
Si el archivo pdf NO tiene imagenes sino texto habría que utilizar otra herramienta como pdftotext que viene con poppler-utils en muchas distribuciones de linux.