Как я могу исправить / восстановить поврежденный файл PDF?

80

У кого-нибудь есть какие-либо рекомендации или процедуры для восстановления поврежденного PDF? Когда я открываю файл, я получаю сообщение «Произошла ошибка при открытии этого документа. Файл поврежден и не может быть восстановлен». Кажется, существует множество инструментов, но ни один из них я бы не назвал заслуживающим доверия. Есть ли какие-либо решения на основе Linux с открытым исходным кодом для этого, возможно?

Тим Александр
источник
Боюсь, инструменты PDF с открытым исходным кодом, как правило, довольно дурацкие. Что вы используете?
Satanicpuppy
Также смотрите: superuser.com/questions/166999/…
slhck
не понравился внешний вид каких-либо инструментов, поскольку они выглядели как бесчисленное множество «Чистильщиков реестра», которые бесполезны. Пробовал Adobe Pro и только начал искать, есть ли в Ghostscript или PDFForge какие-нибудь переключатели для восстановления.
Тим Александр
С Ghostscript все в порядке, но, конечно, не лучше, чем Acrobat. Это совершенно голые кости.
Satanicpuppy
6
@Satanicpuppy Я не согласен :: Я часто использую ghostscript для восстановления поврежденных или некачественных PDF-файлов, и он работает очень хорошо.
Эдди Б

Ответы:

100

Ghostscript восстановит ваш поврежденный PDF-файл автоматически ... если он может открыть его в первую очередь (то есть, если он не поврежден без возможности восстановления). Но после этого вам все равно придется перепроверить результат ...

В Linux попробуйте эту команду:

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

В Windows попробуйте это:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Курт Пфайфл
источник
2
Ghostscript отлично выполняет рендеринг PDF-файлов ... Я регулярно использую gs для восстановления pdf-файлов для улучшения качества шрифта.
Эдди Б
1
/ Препресс делает качество действительно хорошим по сравнению с / screen. Благодарю.
Доланор
Я получаю сообщение «Произошла ошибка при чтении таблицы XREF». Что это обозначает?
Геремия
Это означает, что во внутреннем оглавлении (которое PDF-файлы должны содержать в виде таблицы XREF ) произошла ошибка, указывающая на неправильное смещение байта для объекта PDF. Скорее всего, Ghostscript исправил эту ошибку и вставил правильную таблицу XREF в вывод. Вы можете проверить это, еще раз запустив вывод через Ghostscript и посмотреть, появляется ли это сообщение по-прежнему.
Курт Пфайфл
37

У меня был поврежденный PDF-файл, print.pdfкоторый Ghostscript не мог открыть, но обычные графические программы просмотра PDF для Linux (Okular, Evince) открылись нормально. (В моем случае, файл имел мусор в начале вместо заголовка PDF, когда открывался в шестнадцатеричном редакторе.)

Эти средства просмотра PDF используют Poppler в качестве внутреннего рендера PDF. Таким образом, вы можете восстановить PDF, используя инструменты командной строки Poppler. В Ubuntu они есть в poppler-utilsпакете. Я использовал:

pdftocairo -pdf print.pdf print_repaired.pdf

который сгенерировал файл PDF с правильными заголовками, какие инструменты, такие как Ghostscript, теперь приняты.

Механическая улитка
источник
3
+1 этот прочитал мой Кварц сгенерировал PDF без нареканий и сразу начал генерировать вывод. Ghostscript, Adobe Acrobat Pro и другие настаивали на том, чтобы сначала восстановить мой PDF-файл объемом 120 ГБ.
Орвеллофил
Это не сработало хотя бы для одного странного PDF-файла, с которым я столкнулся, но кажется хорошим началом.
Брайан Петерсон
1
Прекрасно работает с PDF, в котором Ghostscript хотел удалить некоторые произвольные элементы на страницах.
Андреа Лаззаротто
Ghostscript не смог прочитать документ, но это сработало как шарм. Кстати, я сделал это на Windows, используя новую подсистему Linux, так круто!
HyLian
24

mutool( страница проекта , man-страница ) будет восстанавливать поврежденные PDF-файлы без их распечатки .

  • Установка, например, в Ubuntu: sudo apt-get install mupdf-tools
  • Запустите это так: 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.

Кроме того, есть несколько инструментов и структур, которые могут разбивать / декомпилировать PDF-файлы в их компоненты без их рендеринга. Они могут быть полезны для извлечения текста, сценариев и изображений. Посмотрите этот ответ для списка таких инструментов: https://reverseengineering.stackexchange.com/q/1526/8210 . Например, вы можете попробовать текущий топ-ответ Origami , у него есть просмотрщик на основе GTK.

jmiserez
источник
3
Это решение работает «лучше», чем решения, предложенные выше, или имеет более высокий рейтинг, поскольку оно не «печатает» файл PDF и сохраняет активные ссылки, кликабельные элементы и т. Д. Для меня это звучит более элегантно, чем использование ghostscript или Каир.
Speredenn
1
К сожалению, mutool cleanне исправить все возможные ошибки. У меня есть файл с различными ошибками в шрифтах и ​​потоках контента, и mutool сохранит эти ошибки.
Доминик Хоннеф
1
@DominikHonnef Вы всегда можете попробовать инструменты / фреймворки, которые разлагают PDF и позволяют просматривать все части без их рендеринга. Это должно позволить вам получать текст, сценарии, изображения и т. Д. Напрямую. См. Этот ответ для получения списка инструментов: reverseengineering.stackexchange.com/q/1526/8210
jmiserez
Единственное, что сработало для меня!
Джамадагни
Это сработало лучше, так как это не делает PDF-файл, в котором он проверяет документ.
riccs_0x
10

У меня был поврежденный pdf-файл, потому что php-файл, используемый для его загрузки, отражал некоторые ошибки (в HTML) и символы NUL в конце.

Решением было открыть PDF-файл с помощью Notepad ++ и удалить весь текст после строки

%%EOF
Ориоль
источник
было то же самое, Adobe Reader не открывался, но родной плагин Mac, Chrome и Firefox PDF отлично отображал PDF-файл. Причиной также было добавление «NUL» в последнюю строку, добавленную во время загрузки.
Тило
У меня был PDF с двумя %%EOF. Я удалил все после первого %%EOFиспользования шестнадцатеричного редактора. Теперь все работает отлично.
Адриан