Ghostscript作为PDF验证器:命令和结果

3
两位学者表示他们使用Ghostscript验证PDF。他们的技术解释有些晦涩:“为了使Ghostscript成为验证器,我们只需将PDF文件转换为'None'。”在演示文稿中,他们补充说“None”是“虚假结果,没有真实输出”,并且转换为None“打印出发现的错误”。
我希望以类似的方式使用Ghostscript,并在此过程中了解一些Ghostscript的知识,以备日后应用。我查阅了Ghostscript文档和之前的StackOverflow答案,尝试了以下操作(在Windows 7虚拟机上使用Ghostscript Portable 9.50):
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表问题是这个文件中唯一的问题,还是可能存在其他未指定的问题?如果是后者,我能否修改命令以获得更具体的指示,当Results.txt报告Badfile.pdf“不符合Adobe发布的PDF规范”时,它意味着什么?

(2) “文件已损坏。这可能是由于在转换或传输文件时出现问题。”这是在暗示对于一些有标记的PDF,Ghostscript识别的问题可能源自Ghostscript本身吗?

(3) “Ghostscript将尝试恢复数据。...此文件有错误已被修复或忽略。”我可以假设操作词是“忽略”--就像那两位学者使用的程序一样,Ghostscript并没有真正尝试恢复数据,而我的命令正在产生“没有实际输出”的结果吗?

(4) 对于某些目的,我可能希望以一行摘要形式输出。例如,JHOVE PDF验证器的audit选项可以生成包含文件名、MD5哈希和PDF文件是否有效的声明的行。鉴于学者发现JHOVE存在问题,如果我能够将Ghostscript的发现放入电子表格进行比较,这将非常有帮助。

我知道Ghostscript可能没有所有这些功能,并且我很感激已经从它那里获得的内容。但是,如果我遗漏了任何东西,我想知道。谢谢您能提供的任何帮助。


1
不是答案,但有一些潜在的见解。从内部来看,PDF文件就像一本由章节组成的书(每个章节都是文本或图形对象等),并带有索引。这个书的比喻不适用于现实世界的书籍,因为章节可以是随机顺序或孤立的 - 只有索引告诉您有效章节的顺序。因此,如果索引(也称为XREF)损坏,则PDF阅读器(Ghostscript)无法导航和验证内容(章节)。因此,我预计您的“已损坏”消息意味着Ghostscript放弃了,并且没有验证进一步的内容。 - Vanquished Wombat
1个回答

3
xref错误是第一个问题。Ghostscript尝试修复并继续执行。然而下一个错误(FirstPage > LastPage)表明它无法解决问题。
这将永远是一个问题;试图从文件中恢复故障可能意味着忽略一些重要的内容(或误解它),导致下一个对象出错,并在级联中不断重复。
Ghostscript并不是一个验证工具,虽然我们最近已经相当勤奋地标记问题,但早期的代码可能会简单地忽略它们。此外,人们认为重复的警告是没有意义、令人讨厌的,并且使真正的故障难以看到,因此许多错误只报告一次,无论有多少发生。
所以回答你的问题:
1. 不,这可能不是唯一的错误,这只是遇到的第一个错误。没有更详细的错误信息。您可以使用-dPDFDEBUG选项,在解释器进行操作时会转储其功能,并且会定位某些类型的问题。"does not conform"只是针对在没有更好的错误时使用的“发生了不好的事情”的样板文件。 2. 不,这并不意味着Ghostscript破坏了它。它提供了PDF文件损坏的两个常见原因:通过非二进制机制(例如电子邮件)传输或进行回车/换行符转换的机制,或编辑文件。 3. 似乎您不知道文件出了什么问题?我看不出为什么您会认为GS正在忽略错误,事实上,在xref问题的情况下,它绝对不会忽略它,它试图修复它。不幸的是,“修复”的xref显然是不正确的,因为它认为没有页面。 4. 不确定这里的问题是什么;GS不会输出单行摘要。您可以设置-dPDFSTOPONERROR选项,如果PDF文件存在问题则会退出并显示错误代码。但这将是一个完整的PostScript错误消息,而不是一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接