首页 > 解决方案 > Ghostscript 作为 PDF 验证器:命令和结果

问题描述

两位学者说他们使用 Ghostscript 来验证 PDF。他们对技术的神秘解释:“为了让 Ghostscript 作为验证器工作,我们只是将 PDF 文件转换为‘无’。” 在幻灯片中,他们补充说“无”是“一个虚拟结果,没有真正的输出”,转换为无“打印出发现的错误”。

我想以类似的方式使用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) 我应该将此输出解释为说外部参照表问题是此文件中唯一的问题,还是可能存在其他未指定的问题?如果是后者,当它报告 Badfile.pdf“不符合 Adob​​e 发布的 PDF 规范”时,我是否可以修改命令以获得更具体的 Results.txt 含义指示?

(2)“文件已损坏。这可能是由于转换或传输文件时出现问题造成的。” 这是否表明,对于某些标记的 PDF,Ghostscript 发现的问题可能是由于 Ghostscript 本身造成的?

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

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

我意识到 Ghostscript 可能没有这一切,我很欣赏我已经拥有的东西。但如果我遗漏了什么,我想知道。感谢您提供的任何光。

标签: validationpdfghostscript

解决方案


外部参照错误是第一个问题。GS 试图解决这个问题并继续。但是下一个错误(FirstPage > LastPage)表明它无法解决问题。

这总是一个问题。试图从文件中的错误中恢复可能意味着忽略一些重要的东西(或 ims 解释它),这会导致下一个对象出错,以此类推。

Ghostscript 不打算用作验证工具,虽然我们最近在标记问题方面相当勤奋,但早期的代码可能只是默默地忽略它们。另外觉得重复的警告是没有意义的,烦人的,而且很难看出真正的故障,所以很多错误只报告一次,不管发生多少次。

所以回答你的问题:

1)不,这可能不是唯一的错误,它只是遇到的第一个错误。没有更多详细的错误。您可以使用 -dPDFDEBUG 转储解释器正在做的事情,并将本地化某些类型的问题。如果没有更好的错误,“不符合”只是“发生了不好的事情”的样板。

2) 不,这并不是说 Ghostscript 破坏了它。它给出了 PDF 文件损坏的 2 个常见原因;通过非二进制机制(例如电子邮件)或进行 CR/LF 翻译的机制传输,或编辑文件。

3)您似乎不知道您的文件有什么问题?我看不出您有任何理由认为 GS 忽略了错误,事实上,在外部参照问题的情况下,它绝对不会忽略它,它试图修复它。遗憾的是,“固定”外部参照显然是不正确的,因为它认为没有页面。

4)不确定这里的问题是什么;GS 不会输出一行摘要。您可以设置 -dPDFSTOPONERROR 如果 PDF 文件有问题,它将以错误代码退出。不过,这将是一个完整的 PostScript 错误消息,而不是一行。


推荐阅读