Re-codificando apenas imagens de um PDF? (ou o ghostscript falha no RGB de 8 bits durante a otimização)
Eu preciso otimizar um grande número de documentos PDF para o tamanho do arquivo, então eu tentei usarghostscript
, invocado assim:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=output-my-doc.pdf input-my-doc.pdf
Eu posso ver isso correndo para algumas páginas, mas em determinadas páginas ele falha.
Eu atualizei parags
versão 9.02, e eu experimento o mesmo. Após estourar o documento em páginas separadas e executar o comando acima em cada página, eu poderia confirmar quais páginas são problemáticas; na verdade, o erro ocorre mesmo se eu chamo apenasgs input-my-doc-pageX.pdf
- isso inicia um visualizador e eu posso ver o texto digitado até chegar a uma imagem, quando ela falhou.
Então eu pude confirmar que no meu caso,gs
falha em imagens específicas - e, finalmente, também posso fornecer um exemplo mínimo de funcionamento (ou melhor, não funciona), que demonstra o problema (abaixo). Em particular, o problema parece ser imagens RGB de 8 bits, especificadas de uma determinada maneira.
Agora, eu não posso dizer se isso é um bug, mas desde que eu preciso fazer isso - eu estava pensando que talvez eu pudesse "enganar"ghostscript
, executando os PDFs por meio de um aplicativo, o que deixaria praticamente inalterados os PDFs - exceto que ele recodificaria as imagens em um único formato (digamos, PNG); de modo que ogs
O otimizador também pode executar esses arquivos sem causar falhas.
Quais opções eu tenho para recodificar apenas as imagens de um determinado PDF usando a linha de comando no Linux?
Muito obrigado antecipadamente por qualquer resposta,
Felicidades!
PS: O caso de teste é basicamente oexemplo de PDF de código-fonte no post:Imagemagick: gerar dados de imagem bruta para incorporação de PDF flate?.
Esse PDF (hello2.pdf
) abre muito bem em, digamos,evince
:
... mas como o xref-table está corrompido, eu 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
O arquivo reparadohello2O.pdf
também abre bem emevince
- no entanto, quando tento executar o acimags
otimizar o comando nele, ele falha:
$ 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