Bagaimana saya bisa memperbaiki / memperbaiki file PDF yang rusak?

80

Adakah yang punya rekomendasi atau prosedur untuk memperbaiki PDF yang rusak? Ketika saya membuka file saya mendapatkan "Ada kesalahan membuka dokumen ini. File tersebut rusak dan tidak dapat diperbaiki." Tampaknya ada banyak sekali alat di luar sana tetapi tidak ada yang bisa saya gambarkan sebagai yang memiliki reputasi baik. Apakah ada solusi berbasis linux opensource untuk ini?

Tim Alexander
sumber
Alat PDF opensource cenderung sangat jelek, saya khawatir. Apa yang kamu gunakan?
Satanicpuppy
tidak suka tampilan salah satu alat karena mereka tampak seperti segudang "Registry Cleaners" di luar sana yang tidak berguna. Telah mencoba Adobe Pro dan baru saja mulai mencari apakah Ghostscript atau PDFForge memiliki sakelar perbaikan.
Tim Alexander
Ghostscript tidak apa-apa, tetapi tentu saja tidak lebih baik dari Acrobat. Ini benar-benar tulang kosong.
Satanicpuppy
6
@Satanicpuppy Saya tidak setuju :: Saya cukup sering menggunakan ghostscript untuk membangun kembali pdf yang rusak atau berkualitas rendah dan kinerjanya sangat baik.
Eddie B

Jawaban:

100

Ghostscript akan memperbaiki PDF Anda yang rusak secara otomatis ... jika dapat membukanya di awal (artinya, jika tidak rusak, tidak dapat diperbaiki). Tetapi setelah itu Anda masih perlu memeriksa ulang hasilnya ...

Di Linux, coba perintah ini:

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

Di Windows, coba yang ini:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Kurt Pfeifle
sumber
2
Ghostscript melakukan pekerjaan rendering pdf yang fantastis ... Saya secara teratur menggunakan gs untuk membangun kembali pdf untuk meningkatkan kualitas font.
Eddie B
1
/ Prepress membuat kualitasnya benar-benar bagus dibandingkan dengan / layar. Terima kasih.
Dolanor
Saya mendapatkan "Terjadi kesalahan saat membaca tabel XREF." Apa artinya?
Geremia
Ini berarti daftar isi internal (apa yang harus dikandung PDF sebagai tabel XREF ) memiliki kesalahan, menunjuk ke offset byte yang salah untuk objek PDF. Ghostscript sangat mungkin memperbaiki kesalahan itu dan memasukkan tabel XREF yang benar ke dalam output. Anda dapat memeriksa ini dengan menjalankan output melalui Ghostscript sekali lagi dan melihat apakah pesan ini masih muncul.
Kurt Pfeifle
37

Saya memiliki file PDF yang rusak print.pdf,, yang Ghostscript tidak dapat membuka, tetapi pemirsa Linux Linux grafis biasa (Okular, Evince) dibuka dengan baik. (Dalam kasus saya, file memiliki sampah di awal alih-alih header PDF, ketika dibuka di hex editor.)

Pemirsa PDF ini menggunakan Poppler sebagai renderer PDF back-end. Jadi, Anda dapat memperbaiki PDF menggunakan alat baris perintah Poppler. Di Ubuntu ini ada dalam poppler-utilspaket. Saya menggunakan:

pdftocairo -pdf print.pdf print_repaired.pdf

yang menghasilkan file PDF dengan tajuk yang benar, yang alat seperti Ghostscript sekarang diterima.

Siput mekanik
sumber
3
+1 ini baca Quartz saya menghasilkan PDF tanpa keluhan, dan segera mulai menghasilkan output. Ghostscript, Adobe Acrobat Pro dan lainnya bersikeras untuk membangun kembali pdf 120GB saya terlebih dahulu.
Orwellophile
Ini tidak berfungsi untuk setidaknya satu PDF aneh yang saya jumpai, tetapi sepertinya ini awal yang baik.
Brian Peterson
1
Berfungsi sempurna pada PDF di mana Ghostscript ingin menghapus beberapa elemen sewenang-wenang pada halaman.
Andrea Lazzarotto
Ghostscript gagal membaca dokumen tetapi ini bekerja seperti pesona. BTW Saya melakukan ini pada Windows menggunakan subsistem linux baru, keren sekali!
HyLian
24

mutool( halaman proyek , halaman manual ) akan memperbaiki PDF yang rusak tanpa mencetaknya .

  • Instalasi misalnya di Ubuntu: sudo apt-get install mupdf-tools
  • Jalankan seperti ini: 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.

Sebagai alternatif, ada beberapa alat dan kerangka kerja yang dapat menguraikan / mendekompilasi PDF ke dalam komponen mereka tanpa merendernya. Ini bisa berguna untuk mengekstraksi teks, skrip, dan gambar. Lihat jawaban ini untuk daftar alat-alat semacam itu: https://reverseengineering.stackexchange.com/q/1526/8210 . Misalnya Anda dapat mencoba jawaban teratas Origami saat ini , ia memiliki penampil berbasis GTK.

jmiserez
sumber
3
Solusi ini bekerja "lebih baik" daripada solusi yang ditawarkan di atas atau peringkat yang lebih baik, karena tidak "mencetak" file PDF dan tetap mengaktifkan tautan, item yang dapat diklik, dll ... Bagi saya, ini terdengar solusi yang lebih elegan daripada menggunakan ghostscript atau Kairo.
Speredenn
1
Sayangnya, mutool cleantidak memperbaiki semua kemungkinan kesalahan. Saya memiliki file yang memiliki berbagai kesalahan pada font dan aliran konten, dan mutool akan menyimpan kesalahan tersebut.
Dominik Honnef
1
@DominikHonnef Anda selalu dapat mencoba alat / kerangka kerja yang menguraikan PDF dan memungkinkan Anda untuk melihat semua bagian tanpa merendernya. Itu akan memungkinkan Anda untuk mendapatkan teks, skrip, gambar, dll secara langsung. Lihat jawaban ini untuk daftar alat: reverseengineering.stackexchange.com/q/1526/8210
jmiserez
Satu-satunya hal yang berhasil untuk saya!
jamadagni
Ini bekerja lebih baik karena ini tidak membuat pdf memeriksa dokumen.
riccs_0x
10

Saya memiliki file pdf yang rusak, karena file php yang digunakan untuk mengunduhnya mengulangi beberapa kesalahan (dalam HTML) dan karakter NUL pada akhirnya.

Solusinya adalah membuka pdf dengan Notepad ++ dan menghapus semua teks setelah baris

%%EOF
Oriol
sumber
sama saja, Adobe Reader tidak membuka tetapi plugin Mac asli, Chrome dan Firefox menampilkan file PDF dengan baik. Alasannya juga ekstra "NUL" pada baris terakhir yang ditambahkan selama upload.
Tilo
Saya punya PDF dengan dua %%EOF. Saya menghapus semuanya setelah yang pertama %%EOFmenggunakan hex editor. Sekarang semuanya bekerja dengan baik.
Adrian