Jak mogę naprawić / naprawić uszkodzony plik PDF?

79

Czy ktoś ma jakieś zalecenia lub procedury naprawy uszkodzonego pliku PDF? Po otwarciu pliku pojawia się komunikat „Wystąpił błąd podczas otwierania tego dokumentu. Plik jest uszkodzony i nie można go naprawić”. Wydaje się, że istnieje niezliczona ilość narzędzi, ale nie można tego nazwać godną zaufania. Czy są jakieś rozwiązania oparte na systemie Linux typu open source?

Tim Alexander
źródło
Obawiam się, że narzędzia PDF typu opensource są dość kiepskie. Czego używasz?
Satanicpuppy
Zobacz także: superuser.com/questions/166999/…
slhck
nie podobał się wygląd żadnego z narzędzi, ponieważ wyglądały jak niezliczone bezużyteczne narzędzia do czyszczenia rejestru. Próbowałem Adobe Pro i właśnie zacząłem sprawdzać, czy Ghostscript lub PDFForge ma jakieś przełączniki naprawy.
Tim Alexander
Ghostscript jest w porządku, ale z pewnością nie jest lepszy niż Acrobat. To zupełnie gołe kości.
Satanicpuppy
6
@Satanicpuppy Nie zgadzam się :: Używam ghostscript do dość często odbudowywanych uszkodzonych lub niskiej jakości plików pdf i działa bardzo dobrze.
Eddie B,

Odpowiedzi:

99

Ghostscript naprawi uszkodzony plik PDF automatycznie ... jeśli będzie mógł go otworzyć w pierwszej kolejności (to znaczy, jeśli nie zostanie uszkodzony nie do naprawienia). Ale potem nadal musisz dokładnie sprawdzić wynik ...

W systemie Linux wypróbuj to polecenie:

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

W systemie Windows spróbuj tego:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Kurt Pfeifle
źródło
2
Ghostscript wykonuje fantastyczną robotę renderowania plików PDF ... Regularnie używam gs do przebudowywania plików pdf w celu poprawy jakości czcionek.
Eddie B,
1
Prepress sprawia, że ​​jakość jest naprawdę dobra w porównaniu do / screen. Dzięki.
Dolanor,
Pojawia się komunikat „Wystąpił błąd podczas odczytu tabeli XREF”. Co to znaczy?
Geremia
Oznacza to, że wewnętrzny spis treści (co pliki PDF muszą zawierać jako tabelę XREF ) zawiera błąd, wskazując nieprawidłowe przesunięcie bajtu dla obiektu PDF. Ghostscript najprawdopodobniej naprawił ten błąd i wstawił poprawną tabelę XREF do wyniku. Możesz to sprawdzić, uruchamiając dane wyjściowe za pomocą Ghostscript jeszcze raz i sprawdzić, czy ten komunikat nadal się pojawia.
Kurt Pfeifle
37

Miałem uszkodzony plik PDF print.pdf, którego Ghostscript nie mógł otworzyć, ale zwykłe graficzne przeglądarki plików PDF dla systemu Linux (Okular, Evince) otworzyły się dobrze. (W moim przypadku plik miał śmieci na początku zamiast nagłówka PDF po otwarciu w edytorze szesnastkowym).

Te przeglądarki plików PDF używają Popplera jako mechanizmu renderującego pliki PDF. Możesz więc naprawić plik PDF za pomocą narzędzi wiersza polecenia Popplera. W Ubuntu są one w poppler-utilspakiecie. Użyłem:

pdftocairo -pdf print.pdf print_repaired.pdf

który wygenerował plik PDF z poprawnymi nagłówkami, które narzędzia takie jak Ghostscript są teraz akceptowane.

Ślimak mechaniczny
źródło
3
Daj +1, czytając mój PDF wygenerowany przez Quartz bez reklam, i natychmiast zacząłem generować dane wyjściowe. Ghostscript, Adobe Acrobat Pro i inni nalegali, aby najpierw odbudować mój plik pdf o pojemności 120 GB.
Orwellophile,
Nie działało to dla co najmniej jednego dziwnego pliku PDF, z którym się spotkałem, ale wydaje się, że to dobry początek.
Brian Peterson
1
Działa doskonale na plikach PDF, w których Ghostscript chciał usunąć niektóre dowolne elementy ze stron.
Andrea Lazzarotto
Ghostscript nie odczytał dokumentu, ale działało to jak urok. BTW Zrobiłem to w systemie Windows przy użyciu nowego podsystemu Linux, więc świetnie!
HyLian
24

mutool( Strona projektu , podręcznika ) będzie naprawić złamane plików PDF bez konieczności ich drukowania .

  • Instalacja np. Na Ubuntu: sudo apt-get install mupdf-tools
  • Uruchom tak: 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.

Alternatywnie istnieje kilka narzędzi i struktur, które mogą rozkładać / dekompilować pliki PDF na ich komponenty bez ich renderowania. Mogą one być przydatne do wyodrębniania tekstu, skryptów i obrazów. Zobacz tę odpowiedź, aby uzyskać listę takich narzędzi: https://reverseengineering.stackexchange.com/q/1526/8210 . Np. Możesz wypróbować aktualną odpowiedź Origami , ma przeglądarkę opartą na GTK.

jmiserez
źródło
3
To rozwiązanie działa „lepiej” niż rozwiązania oferowane wyżej lub wyżej w rankingu, ponieważ nie „drukuje” pliku PDF i utrzymuje aktywne linki, klikalne elementy itp. Dla mnie brzmi to bardziej elegancko niż przy użyciu ghostscript lub Cairo.
Speredenn
1
Niestety mutool cleannie naprawia wszystkich możliwych błędów. Mam plik z różnymi błędami w strumieniach czcionek i zawartości, a mutool zachowa te błędy.
Dominik Honnef,
1
@DominikHonnef Zawsze możesz wypróbować narzędzia / frameworki, które rozkładają plik PDF i umożliwiają przeglądanie wszystkich części bez ich renderowania. To powinno umożliwić ci bezpośrednie uzyskanie tekstu, skryptów, obrazów itp. Zobacz tę odpowiedź, aby uzyskać listę narzędzi: reverseengineering.stackexchange.com/q/1526/8210
jmiserez
Jedyne, co dla mnie zadziałało!
jamadagni
Działa to lepiej, ponieważ nie renderuje pdf, w którym sprawdza dokument.
riccs_0x
10

Miałem uszkodzony plik pdf, ponieważ plik php użyty do pobrania go powtórzył niektóre błędy (w HTML) i znaki NUL na końcu.

Rozwiązaniem było otwarcie pliku pdf za pomocą Notepad ++ i usunięcie całego tekstu po wierszu

%%EOF
Oriol
źródło
miał to samo, Adobe Reader nie otworzył się, ale natywna wtyczka Mac, Chrome i Firefox PDF wyświetlała plik PDF w porządku. Powodem było również dodanie „NUL” w ostatnim wierszu dodanym podczas przesyłania.
Tilo
Miałem plik PDF z dwoma %%EOF. Usunąłem wszystko po pierwszym %%EOFużyciu edytora szesnastkowego. Teraz wszystko działa dobrze.
Adrian