Como posso corrigir / reparar um arquivo PDF corrompido?

80

Alguém tem alguma recomendação ou procedimento para reparar um PDF corrompido? Quando abro o arquivo, obtenho "Ocorreu um erro ao abrir este documento. O arquivo está danificado e não pode ser reparado". Parece haver uma infinidade de ferramentas por aí, mas nenhuma que eu possa descrever como respeitável. Existe alguma solução baseada em Linux de código aberto para isso, possivelmente?

Tim Alexander
fonte
As ferramentas de PDF de código-fonte aberto tendem a ser bem ruins, receio. O que você está usando?
23630 Satanicpuppy
não gostaram da aparência de nenhuma das ferramentas, pois pareciam uma miríade de "Limpadores de Registro" por aí que são inúteis. Tentei o Adobe Pro e comecei a procurar se o Ghostscript ou o PDFForge possui opções de reparo.
Tim Alexander
O Ghostscript está bem, mas certamente não é melhor que o Acrobat. São ossos completamente nus.
23630 Satanicpuppy
6
@Satanicpuppy Não concordo: Eu uso o ghostscript para reconstruir PDFs danificados ou de baixa qualidade com bastante frequência e ele funciona muito bem.
Eddie B

Respostas:

100

O Ghostscript reparará seu PDF corrompido automaticamente ... se ele puder ser aberto (se não estiver danificado além do reparo). Mas depois você ainda precisará verificar o resultado ...

No Linux, tente este comando:

 gs \
  -o repaired.pdf \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
   corrupted.pdf

No Windows, tente este:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Kurt Pfeifle
fonte
2
O Ghostscript faz um trabalho fantástico de renderização de PDFs ... Eu uso regularmente o gs para reconstruir os PDFs para melhorar a qualidade da fonte.
Eddie B
1
A pré-impressão torna a qualidade realmente boa em comparação com a / tela. Obrigado.
Dolanor
Recebo "Ocorreu um erro ao ler uma tabela XREF". O que isso significa?
Geremia
Isso significa que o índice interno (o que os PDFs precisam conter como tabela XREF ) teve um erro, apontando para um deslocamento de bytes incorreto para um objeto PDF. O Ghostscript provavelmente reparou esse erro e inseriu uma tabela XREF correta na saída. Você pode verificar isso executando a saída no Ghostscript mais uma vez e ver se esta mensagem ainda aparece.
Kurt Pfeifle
37

Eu tinha um arquivo PDF corrompido print.pdf, que o Ghostscript não pôde abrir, mas os visualizadores gráficos comuns do Linux em PDF (Okular, Evince) abriram bem. (No meu caso, o arquivo tinha lixo no início, em vez de um cabeçalho PDF, quando aberto em um editor hexadecimal.)

Esses visualizadores de PDF usam o Poppler como um renderizador de PDF de back-end. Assim, você pode reparar o PDF usando as ferramentas de linha de comando do Poppler. No Ubuntu, eles estão no poppler-utilspacote. Eu usei:

pdftocairo -pdf print.pdf print_repaired.pdf

que gerou um arquivo PDF com cabeçalhos corretos, que ferramentas como Ghostscript agora aceitam.

Caracol mecânico
fonte
3
Marquei com +1 este PDF gerado pelo Quartz sem reclamações e imediatamente comecei a gerar resultados. Ghostscript, Adobe Acrobat Pro e outros insistiram em reconstruir meu pdf de 120 GB primeiro.
Orwellophile
Isso não funcionou em pelo menos um PDF estranho que eu encontrei, mas parece um bom começo.
Brian Peterson
1
Funciona perfeitamente em um PDF no qual o Ghostscript queria remover alguns elementos arbitrários das páginas.
Andrea Lazzarotto
O Ghostscript não conseguiu ler o documento, mas isso funcionou como um encanto. BTW eu fiz isso no Windows usando o novo subsistema linux, tão legal!
precisa saber é
24

mutool( página do projeto , página de manual ) reparará PDFs quebrados sem imprimi-los .

  • Instalação, por exemplo, no Ubuntu: sudo apt-get install mupdf-tools
  • Execute-o assim: mutool clean input.pdf output.pdf
mutool clean [options] input.pdf [output.pdf] [pages]

  The clean command pretty prints and rewrites the syntax of a PDF file.
   It can be used to repair broken files, expand compressed streams,
   filter out a range of pages, etc.
  If no output file is specified, it will write the cleaned PDF to
   "out.pdf" in the current directory.

Como alternativa, existem algumas ferramentas e estruturas que podem decompor / descompilar PDFs em seus componentes sem renderizá-los. Isso pode ser útil para extrair texto, scripts e imagens. Consulte esta resposta para obter uma lista dessas ferramentas: https://reverseengineering.stackexchange.com/q/1526/8210 . Por exemplo, você pode tentar a resposta atual atual do Origami , que possui um visualizador baseado em GTK.

jmiserez
fonte
3
Esta solução funciona "melhor" do que as soluções oferecidas acima ou melhor classificadas, pois não "imprime" o arquivo PDF e mantém ativos os links, itens clicáveis, etc ... Para mim, parece uma solução mais elegante do que usar o ghostscript ou Cairo.
precisa saber é o seguinte
1
Infelizmente, mutool cleannão corrige todos os erros possíveis. Eu tenho um arquivo que possui vários erros nos fluxos de fonte e conteúdo, e o mutool manterá esses erros.
Dominik Honnef
1
@DominikHonnef Você sempre pode experimentar ferramentas / estruturas que decompõem o PDF e permitem visualizar todas as partes sem renderizá-las. Isso deve permitir que você obtenha texto, scripts, imagens etc. diretamente. Veja esta resposta para uma lista de ferramentas: reverseengineering.stackexchange.com/q/1526/8210
jmiserez
A única coisa que funcionou para mim!
Jamadagni
Isso funcionou melhor, pois isso não renderiza o pdf e examina o documento.
Riccs_0x 04/10/19
10

Eu tinha um arquivo pdf corrompido, porque o arquivo php usado para fazer o download ecoou alguns erros (em HTML) e caracteres NUL no final.

A solução foi abrir o pdf com o Notepad ++ e remover todo o texto após a linha

%%EOF
Oriol
fonte
tinha o mesmo, o Adobe Reader não abriu, mas o plug-in PDF nativo do Mac, Chrome e Firefox exibia um arquivo PDF bem. O motivo também foi extra "NUL" na última linha adicionada durante o upload.
Tilo
Eu tinha um PDF com dois %%EOF. Eu apaguei tudo após o primeiro %%EOFusando um editor hexadecimal. Agora tudo funciona bem.
Adrian