Ghostscript как PDF Validator: команда и результаты - PullRequest
0 голосов
/ 15 января 2020

Два ученых сказали, что они использовали Ghostscript для проверки PDF-файлов. Их крипти c объяснение техники: «Чтобы Ghostscript работал как валидатор, мы просто конвертировали файлы PDF в« Нет »». В слайд-шоу они добавили, что «None» был «фиктивным результатом, без реального вывода», и что преобразование в None »выводит найденные ошибки."

Я хотел бы использовать Ghostscript аналогичным образом, а также хотел бы немного узнать о Ghostscript в процессе, для будущих приложений. Мой обзор документации Ghostscript и предыдущего ответа StackOverflow побудил меня попробовать это (используя Ghostscript Portable 9.50 в Windows 7 виртуальной машине) :

gswin64c.exe -o /dev/null -dNODISPLAY "C:\PDFs\Badfile.pdf" > "C:\Results.txt"

Я приветствую предложения о том, является ли это лучшей командой для этой цели. Мои вопросы здесь связаны с тем, что Results.txt говорит о Badfile.pdf. Вот содержимое файла Results.txt:

GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
   **** Error:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.
   **** However, the output may be incorrect.
   No pages will be processed (FirstPage > LastPage).

   **** This file had errors that were repaired or ignored.
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

   **** The rendered output from this file may be incorrect.

Мои вопросы:

(1) Должен ли я интерпретировать этот вывод как сообщение о том, что проблема таблицы XREF является единственной проблемой в этом файле, или могут быть другие неуказанные проблемы? Если последнее, могу ли я изменить команду, чтобы получить более точное указание c о значении Results.txt, когда оно сообщает, что Badfile.pdf «не соответствует опубликованной спецификации Adobe в формате PDF»?

( 2) «Файл был поврежден. Это могло быть вызвано проблемой при преобразовании или передаче файла». Означает ли это, что для некоторых помеченных PDF-файлов проблемы, выявленные Ghostscript, могут быть связаны с самим Ghostscript?

(3) «Ghostscript попытается восстановить данные ... В этом файле были ошибки, которые были исправлены или игнорируется. " Могу ли я предположить, что оперативное слово «игнорируется» - что, как и в процедуре, используемой этими двумя учеными, Ghostscript на самом деле не пытается восстановить данные, и моя команда выдает «нет реального вывода»?

(4) Для некоторых целей может потребоваться вывод в виде однострочной сводной формы. Например, опция валидатора JHOVE PDF audit может создать строку, содержащую имя файла, MD5 ha sh и утверждение, является ли файл PDF действительным. Учитывая вывод ученых о том, что у JHOVE есть проблемы, было бы полезно, если бы я мог поместить результаты Ghostscript в электронную таблицу для сравнения.

Я понимаю, что Ghostscript может не иметь всего этого, и я ценю то, что уже получил от него. , Но если я что-то упустил, я хотел бы знать. Спасибо за любой свет, который вы можете пролить.

1 Ответ

0 голосов
/ 15 января 2020

Ошибка внешней ссылки - это проблема first . GS пытается исправить это и продолжить. Однако следующая ошибка (FirstPage> LastPage) предполагает, что она не смогла решить проблему.

Это всегда будет проблемой; попытка восстановления после сбоя в файле может означать игнорирование чего-то важного (или его интерпретацию с помощью ims), которое приводит к ошибке следующего объекта и т. д. в каскаде.

Ghostscript не предназначен для проверки Если в последнее время мы достаточно усердно занимались маркировкой проблем, предыдущий код мог просто молча их игнорировать. Кроме того, считалось, что повторные предупреждения бессмысленны, раздражают и затрудняют выявление реальной ошибки, поэтому о многих ошибках сообщается только один раз, независимо от того, сколько здесь случаев.

Итак, чтобы ответить на ваши вопросы :

1) нет, это может быть не единственной ошибкой, это только первая обнаруженная ошибка. Больше нет подробных ошибок. Вы можете использовать -dPDFDEBUG, который выводит информацию о том, что делает интерпретатор, и локализует некоторые виды проблем. «Не соответствует» - это просто шаблон для «что-то плохое случилось» на случай, если нет лучшей ошибки.

2) Нет, это не значит, что Ghostscript сломал ее. Это дает 2 общих причины для PDF-файлов, которые будут повреждены; передача с помощью недвоичного механизма (например, по электронной почте) или с помощью перевода CR / LF или редактирования файла.

3) Кажется, вы не знаете, что не так с вашим файлом? Я не вижу причин, по которым вы могли бы предположить, что GS игнорирует ошибку, и на самом деле в случае проблемы с внешними ссылками она будет не игнорировать ее, она пыталась ее исправить. К сожалению, «исправленная» внешняя ссылка была явно неправильной, потому что она считает, что страниц нет.

4) Не уверен, что вопрос здесь; GS не будет выводить однострочное резюме. Вы можете установить -dPDFSTOPONERROR, который завершится с кодом ошибки, если есть проблема с файлом PDF. Это будет полное сообщение об ошибке PostScript, а не одна строка.

...