¿Recodificar solo las imágenes de un PDF? (o, ghostscript falla en RGB de 8 bits al optimizar)

Necesito optimizar varios documentos PDF grandes para el tamaño del archivo, así que intenté usarghostscript, invocado así:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=output-my-doc.pdf input-my-doc.pdf

Puedo ver esto ejecutándose para algunas páginas, pero luego en páginas particulares se bloquea.

He actualizado ags Versión 9.02, y yo experimento lo mismo. Después de dividir el documento en páginas separadas y ejecutar el comando anterior en cada página, pude confirmar qué páginas son problemáticas; de hecho, el error ocurre incluso si llamogs input-my-doc-pageX.pdf - esto inicia un visor, y pude ver el texto compuesto hasta que se trataba de una imagen, cuando se bloqueaba.

Así que pude confirmar que en mi caso,gs se bloquea en imágenes específicas y, finalmente, también puedo proporcionar un ejemplo de trabajo mínimo (o más bien, que no funciona), que demuestra el problema (a continuación). En particular, el problema parece ser una imagen RGB de 8 bits, especificada de cierta manera.

 

Ahora, no puedo decir si esto es un error, pero como necesito hacer esto, estaba pensando que tal vez podría "hacer trampa"ghostscript, al ejecutar los PDF a través de una aplicación, que prácticamente dejaría los PDF intactos, excepto que volvería a codificar las imágenes en un solo formato (por ejemplo, PNG); de manera que lags El optimizador también puede ejecutar estos archivos sin fallar.

¿Qué opciones tengo para volver a codificar solo las imágenes de un PDF determinado mediante la línea de comandos en Linux?

Muchas gracias de antemano por cualquier respuesta,
¡Aclamaciones!

 

PD: el caso de prueba es básicamente elEjemplo de código fuente en PDF en el post:Imagemagick: ¿generar datos de imagen en bruto para incrustar PDF?.

Ese PDF (hello2.pdf) se abre bien en, por ejemplo,evince:

... pero como la tabla de referencias externas está dañada, la reparo:

$ pdftk hello2.pdf output hello2O.pdf
$ qpdf --check hello2O.pdf 
checking hello2O.pdf
PDF Version: 1.4
File is not encrypted
File is not linearized
No errors found

El archivo reparadohello2O.pdf también abre bien enevince - Sin embargo, cuando intento ejecutar lo anterior.gs optimizando el comando en él, falla:

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=optihello2O.pdf hello2O.pdf
GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Loading NimbusSanL-Regu font from /usr/share/ghostscript/9.02/Resource/Font/NimbusSanL-Regu... 2756020 1410650 1869284 568021 3 done.
Error: /undefined in --run--
Operand stack:
   --dict:6/15(L)--   false   --dict:11/19(L)--   --dict:4/4(L)--   --nostringval--   FlateDecode   --dict:4/4(L)--   0
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1910   1   3   %oparray_pop   1909   1   3   %oparray_pop   1893   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   1   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   false   1   %stopped_push   --nostringval--   %loop_continue   --nostringval--   576   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1160/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82/200(L)--   --dict:108/127(ro)(G)--   --dict:295/300(ro)(G)--   --dict:23/30(L)--   --dict:6/8(L)--   --dict:25/40(L)--   --dict:7/17(L)--
Current allocation mode is local
GPL Ghostscript 9.02: Unrecoverable error, exit code 1

Respuestas a la pregunta(1)

Su respuesta a la pregunta