GhostScript - tentativa de reduzir o tamanho do arquivo de um PDF - erro

1

Estou tentando reduzir o tamanho do arquivo de um PDF usando o GhostScript. Geralmente, isso funciona:

gswin32c -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf

Acho que se livra de marcadores, anotações, etc.

Em alguns PDFs, acabo com um PDF em branco. Eu recebo a seguinte saída:

GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /rangecheck in --run--
Operand stack:
   15   0   15   --nostringval--   15
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval-
-   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   fa
lse   1   %stopped_push   1926   1   3   %oparray_pop   1925   1   3   %oparray_
pop   1909   1   3   %oparray_pop   --nostringval--   --nostringval--   --nostri
ngval--   --nostringval--   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1166/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82
/200(L)--   --dict:108/127(ro)(G)--   --dict:291/300(ro)(G)--   --dict:22/30(L)-
-
Current allocation mode is local
GPL Ghostscript 9.04: Unrecoverable error, exit code 1

A mensagem de erro não é particularmente útil. Alguma sugestão como solucionar esse problema?

    
por StackOverflowNewbie 29.09.2011 / 00:52

3 respostas

3

Comece usando um dispositivo diferente do pdfwrite, você pode iniciar o Ghostscript sem nenhum argumento (use a versão gswin32 do Windows), depois arraste e solte o arquivo nele. Isso abrirá uma janela para exibir o resultado.

Se isso funcionar, você provavelmente encontrou um bug no pdfwrite. Se não, então é um erro do Ghostscript ou seu PDF é inválido de alguma forma. O fato de o Acrobat abrir não o impede de ser inválido, o Acorbat abre muitos arquivos PDF quebrados ....

A mensagem de erro é útil, para aqueles que falam PostScript ;-) Para aqueles que não o fazem, significa 'algo deu errado' , mas se você não Entenda o PostScript que é o erro mais útil que você pode esperar. Neste caso, está lhe dizendo que um operando estava fora da faixa permitida para um operador.

Você pode tentar executar com -dPDFDEBUG , que informará qual objeto no arquivo PDF causou o problema. Mas, a menos que você conheça muito bem o PDF, isso provavelmente não o ajudará muito.

Sua melhor aposta é abrir um relatório de erros no link , você precisará anexar o arquivo PDF ofensivo e fornecer uma linha de comando para mostre o problema. Se ele for exibido com o dispositivo display (por exemplo, a janela que abre quando você inicia gswin32c.exe sem nenhum argumento para arrastar e soltar arquivos), forneça essa linha de comando e não a de pdfwrite. A suposição é que, se o dispositivo é pdfwrite, então é um problema na gravação, o que provavelmente não é.

De passagem, o pdfwrite não se livra simplesmente de anotações e marcadores, ele interpreta completamente o arquivo PDF em primitivas gráficas, e então cria um novo arquivo PDF que contém essas primitivas gráficas. Como resultado, não há garantia de que o conteúdo do PDF criado seja de alguma forma semelhante ao conteúdo do original. Eles devem combinar na aparência, mas os objetos podem ser transformados em diferentes tipos.

    
por 29.09.2011 / 10:16
0

Além do que KenS mencionou, esteja ciente de que as anotações XFA (formulários PDF gerados com o Adobe LifeCycle) não são suportadas no Ghostscript , portanto, um arquivo contendo apenas esses itens provavelmente resultará em um arquivo em branco quando processado pelo gswin32c.

    
por 30.09.2011 / 18:05
0

Uso:

gswin64c -dQUIET -dBATCH -dNOPAUSE -dSAFER -dMaxSubsetPct = 100 -dPDFSETTINGS = / ebook -sDEVICE = pdfwrite -sOutputFile = outputfile.pdf inputfile.pdf

Você pode substituir a tela ou a impressora pelo ebook acima - isso altera a resolução das imagens (72/150/300 dpi)

Boa sorte; -)

    
por 24.03.2014 / 00:46