Comment puis-je réparer / réparer un fichier PDF corrompu?

80

Quelqu'un a-t-il des recommandations ou des procédures pour réparer un PDF corrompu? Lorsque j'ouvre le fichier, je reçois le message "Une erreur s'est produite lors de l'ouverture de ce document. Le fichier est endommagé et ne peut pas être réparé." Il semble y avoir une myriade d'outils, mais aucun que je puisse qualifier de réputé. Existe-t-il des solutions Linux open source pour cela?

Tim Alexander
la source
Les outils PDF Opensource ont tendance à être assez merdiques, j'en ai bien peur. Qu'est-ce que vous utilisez?
Satanicpuppy
Je n'ai pas aimé l'apparence de tous les outils, car ils ressemblaient à la myriade de "nettoyeurs de registre" qui sont inutiles. J'ai essayé Adobe Pro et je viens de commencer à chercher si Ghostscript ou PDFForge ont des interrupteurs de réparation.
Tim Alexander
Ghostscript va bien, mais ce n'est certainement pas meilleur qu'Acrobat. C'est complètement nu.
Satanicpuppy
6
@Satanicpuppy Je ne suis pas d'accord :: J'utilise ghostscript pour reconstruire assez souvent des fichiers PDF endommagés ou de qualité médiocre, qui fonctionne très bien.
Eddie B

Réponses:

100

Ghostscript réparera automatiquement votre PDF corrompu ... s'il peut l'ouvrir (c'est-à-dire s'il n'est pas endommagé au-delà de toute réparation). Mais après, vous aurez encore besoin de vérifier le résultat ...

Sous Linux, essayez cette commande:

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

Sous Windows, essayez celui-ci:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Kurt Pfeifle
la source
2
Ghostscript fait un travail fantastique de rendu des fichiers PDF ... J'utilise régulièrement gs pour reconstruire des fichiers PDF afin d'améliorer la qualité de la police.
Eddie B
1
Le / prépresse rend la qualité vraiment bonne comparée à / screen. Merci.
Dolanor
Je reçois "Une erreur s'est produite lors de la lecture d'une table XREF." Qu'est-ce que ça veut dire?
Geremia
Cela signifie que la table des matières interne (ce que les PDF doivent contenir sous forme de table XREF ) contenait une erreur, indiquant un décalage d'octet incorrect pour un objet PDF. Il est très probable que Ghostscript ait réparé cette erreur et inséré une table XREF correcte dans la sortie. Vous pouvez vérifier cela en exécutant la sortie via Ghostscript une fois de plus et voir si ce message apparaît toujours.
Kurt Pfeifle le
37

J'avais un fichier PDF corrompu print.pdfque Ghostscript ne pouvait pas ouvrir, mais les visualiseurs graphiques classiques sous Linux (Okular, Evince) s'ouvraient correctement. (Dans mon cas, le fichier avait des ordures au début au lieu d'un en-tête PDF, lorsqu'il était ouvert dans un éditeur hexadécimal.)

Ces visualiseurs PDF utilisent Poppler comme moteur de rendu PDF. Vous pouvez donc réparer le fichier PDF à l'aide des outils de ligne de commande de Poppler. Dans Ubuntu, ceux-ci sont dans le poppler-utilspackage. J'ai utilisé:

pdftocairo -pdf print.pdf print_repaired.pdf

qui a généré un fichier PDF avec des en-têtes corrects, outils tels que Ghostscript maintenant acceptés.

Escargot mécanique
la source
3
+1 cette lecture mon PDF Quartz généré sans plaintes, et a immédiatement commencé à générer une sortie. Ghostscript, Adobe Acrobat Pro et d’autres ont insisté pour reconstruire d’abord mon fichier PDF de 120 Go.
Orwellophile
Cela n'a pas fonctionné pour au moins un PDF étrange que j'ai rencontré, mais cela semble être un bon début.
Brian Peterson
1
Fonctionne parfaitement sur un PDF sur lequel Ghostscript souhaitait supprimer certains éléments arbitraires des pages.
Andrea Lazzarotto
Ghostscript n'a pas lu le document mais cela a fonctionné comme un charme. BTW je l'ai fait sur Windows en utilisant le nouveau sous-système Linux, tellement cool!
HyLian
24

mutool( page du projet , page de manuel ) réparera les PDF brisés sans les imprimer .

  • Installation par exemple sur Ubuntu: sudo apt-get install mupdf-tools
  • Exécutez-le comme ceci: 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.

Alternativement, il existe quelques outils et frameworks qui peuvent décomposer / décompiler des PDF en leurs composants sans les restituer. Celles-ci pourraient être utiles pour extraire du texte, des scripts et des images. Voir cette réponse pour une liste de ces outils: https://reverseengineering.stackexchange.com/q/1526/8210 . Par exemple, vous pouvez essayer la première réponse Origami actuelle , elle dispose d’un visualiseur basé sur GTK.

jmiserez
la source
3
Cette solution fonctionne "mieux" que les solutions proposées ci-dessus ou mieux classée, car elle ne "imprime" pas le fichier PDF et ne maintient pas les liens, les éléments cliquables, etc. Pour moi, cela semble une solution plus élégante que celle de ghostscript. ou cairo.
Speredenn
1
Malheureusement, mutool cleanne corrige pas toutes les erreurs possibles. J'ai un fichier qui contient diverses erreurs dans les flux de polices et de contenu, et Mutool les conserve.
Dominik Honnef
1
@DominikHonnef Vous pouvez toujours essayer des outils / frameworks qui décomposent le PDF et vous permettent de visualiser toutes les pièces sans les rendre. Cela devrait vous permettre d’obtenir directement du texte, des scripts, des images, etc. Voir cette réponse pour une liste d'outils: reversenergeene.stackexchange.com/q/1526/8210
jmiserez
La seule chose qui a fonctionné pour moi!
jamadagni
Cela a mieux fonctionné car cela ne rend pas le pdf, il examine le document.
riccs_0x
10

J'avais un fichier pdf corrompu, car le fichier php utilisé pour le télécharger faisait écho à des erreurs (en HTML) et des caractères NUL à la fin.

La solution consistait à ouvrir le fichier PDF avec Notepad ++ et à supprimer tout le texte après la ligne.

%%EOF
Oriol
la source
Adobe Reader ne s’était pas ouvert, mais le plug-in PDF natif pour Mac, Chrome et Firefox affichait correctement le fichier PDF. La raison était également extra "NUL" à la dernière ligne ajoutée pendant le téléchargement.
Tilo
J'ai eu un PDF avec deux %%EOF. J'ai tout supprimé après le premier en %%EOFutilisant un éditeur hexadécimal. Maintenant tout fonctionne bien.
Adrian