Adobe在属性中显示不正确的PDF版本(PDF)

Adobe在属性中显示不正确的PDF版本(PDF),pdf,properties,adobe,metadata,version,Pdf,Properties,Adobe,Metadata,Version,我的PDF在标题中包含“%PDF-1.3”。这意味着PDF版本是1.3,但我的系统上安装的Adobe reader(XI)在文件>属性中查看时显示为1.5 什么是对的 1.3还是1.5 通过阅读java中的PDF元数据,我可以获得PDF版本1.3。如何通过java程序获取PDF版本1.5?文件头中的版本可以稍后在文件中覆盖,参见: 从PDF 1.4开始,应使用文档目录词典中的版本条目(通过文件尾部中的根条目定位,如7.5.5“文件尾部”所述),如果存在,则应使用该条目代替标题中指定的版本 (第7

我的PDF在标题中包含“%PDF-1.3”。这意味着PDF版本是1.3,但我的系统上安装的Adobe reader(XI)在文件>属性中查看时显示为1.5

什么是对的

1.3还是1.5


通过阅读java中的PDF元数据,我可以获得PDF版本1.3。如何通过java程序获取PDF版本1.5?

文件头中的版本可以稍后在文件中覆盖,参见:

从PDF 1.4开始,应使用文档目录词典中的版本条目(通过文件尾部中的条目定位,如7.5.5“文件尾部”所述),如果存在,则应使用该条目代替标题中指定的版本

(第7.5.2节文件头)

因此,

什么是对的

取决于PDF内容。如果您不确定,请共享您的PDF进行分析

关于评论中的问题

(1) 我在pdf中找不到类似1.5的内容,但记事本仍然显示版本为1.5,版本将以编码形式出现

不,但这将是一个名字,而不是一个数字:

该条目的值应为名称对象,而不是数字,因此在写入PDF文件(例如,/1.4)时,应以索利多士(2Fh)字符(/)开头

(表28–目录词典中的条目)

所以搜索“1.5”应该可以找到它。除非使用压缩对象流(PDF 1.5功能),并且最新的目录已放入此类对象流中

(2) java中是否有任何pdf api可用于读取此类版本条目

您可以使用任何允许访问其低级例程的库来读取条目,例如iText、PDFBox、PDFClown等

(3) 如果是,怎么做

PDF阅读器的文本中

reader.getCatalog().getAsName(PdfName.VERSION)
在用于
文档的PDFClown中

document.getVersion()
文件
检索原始标题版本时,使用:

file.getVersion()
(由Stefano Chizzolini提出的PDFClown信息)

(4) 请让我知道我应该检查什么类型的内容来检测pdf的实际版本,好吗

通常检查标题和目录就足够了

不过,可能有些程序在发现只在以后的PDF规范中使用PDF功能时,会返回所有使用功能都存在的最小PDF规范版本。在这种情况下,您必须检查所有可访问的PDF内容

这对于1.5中介绍的交叉引用和对象流尤其有意义


另外,如果我使用版本1.6编辑标题PDF header,它会将版本显示为1.6,因此这意味着Adobe dosent display属性被文档目录字典中的版本条目覆盖,它会从这两个版本中获取更高版本

这是正确的,并且在版本的规范中也提到了它

文件符合的PDF规范版本(例如,1.4),如果晚于文件头中指定的版本(见7.5.2,“文件头”)。如果页眉指定了更高版本,或者如果没有该条目,则该文件应符合页眉中指定的版本

(表28–目录词典中的条目)

关于提供的屏幕截图

OP提供了一个屏幕截图:

您可以清楚地看到所讨论的文件已线性化(在左侧可以看到线性化参数字典,在右侧可以通过“Fast Web View:Yes”确认)。在线性化参数字典之后,有第一页的交叉引用,这些交叉引用作为交叉引用流而不是交叉引用表提供

PDF 1.5中引入了交叉参考流,使用交叉参考流而不是交叉参考表的PDF甚至无法根据PDF 1.4和1.3参考进行解析

根据1.5之前的规范,我假设AdobeReader声称是1.5版本,因为这是不可解析的

我想,我将无法从带有其他API的PDF获取1.5AS版本。是这样吗

我想是的,至少现在是这样;许多库可能对用户隐藏此类详细信息(如是否使用交叉引用流或表)。但是,由于您没有提供有问题的PDF,这只是一个假设

我应该为客户提供什么解决方案?我一直在出版领域工作。在使用java开发的应用程序中,我们确实进行了验证检查:系统不得允许PDF版本1.3及之前的版本

这一要求尚未明确界定。什么是PDF 1.3版及之前的版本

  • 它是一个声称为1.3或之前版本的PDF文件吗

    作为特例,PDF声明不同版本的情况如何?例如,标题和目录中的不同条目,或不同增量更新中的不同条目。如果其中一个不同的条目是1.3或之前的,那么这样的PDF是1.3或之前的版本吗?或者仅当所有值均为1.3或之前?或者最新目录版本条目是否需要为1.3或更高版本

  • 它是一个PDF文件,被选定的指标程序识别为1.3还是之前的版本(例如,固定版本的Adobe Reader)

  • 根据PDF参考1.3或之前的版本,该PDF是否有效

  • 或者,根据任何PDF参考1.4及其后版本的规定,该PDF是无效的

唯一容易实现的是第一个变体(已经决定了特殊情况),但是来自发布环境的客户最有可能意味着与最后一个变体类似的东西

我们使用pdf工具箱java jar检查pdf版本。这使得pdf版本为1.3,因此验证失败
gs -o tempPdfFilePath -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 pdfFilePath && mv tempPdfFilePath pdfFilePath