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

时间:2014-11-13 09:54:41

标签: pdf properties adobe metadata version

我的PDF包含"%PDF-1.3"在标题中。这意味着PDF版本是1.3,但是在我的系统上安装的Adobe阅读器(XI)如果在File>中查看,则将版本显示为1.5。属性。

什么是对的?

1.3或1.5?

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

2 个答案:

答案 0 :(得分:1)

文件标题中的版本可以稍后在文件中覆盖,参见PDF specification

  

从PDF 1.4开始,文档目录词典中的版本条目(通过文件预告片中的 Root 条目找到,如7.5.5中所述,&# 34;文件预告片"),如果存在,应使用而不是标题中指定的版本。

     

(第7.5.2节文件标题)

因此,

  

什么是对的?

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

关于评论中的问题......

  

(1)我在pdf打开时没有找到类似1.5的记事本仍然显示版本为1.5。 ,版本将采用编码形式?

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

  

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

     

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

所以搜索" 1.5"应该找到它。除非使用压缩对象流(PDF 1.5特性),并且已将最新目录放入此类对象流中。

  

(2)java中是否有可用于阅读此类版本条目的pdf-api。

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

  

(3)如果是,怎么办?

在iText中PdfReader reader

reader.getCatalog().getAsName(PdfName.VERSION)

在PDFClown中Document document

document.getVersion()

使用以下内容从File file检索原始标题版本:

file.getVersion()

(Stefano Chizzolini提出的PDF小丑信息)

  

(4)请您告诉我应该检查哪种类型的内容来检测pdf的实际版本?

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

但是,某些程序在发现PDF功能的使用仅出现在以后的PDF规范中时,可能会返回最小的PDF规范版本,其中包含所有使用的功能。在这种情况下,您必须检查所有可访问的PDF内容。

这对1.5中引入的交叉引用和对象流特别有意义。

  

此外,如果我使用版本1.6编辑标题PDF标题,它将版本显示为1.6,因此它表示Adobe dosent显示属性被文档目录字典中的版本条目覆盖,它需要以后两个版本。

这是正确的,并且在版本目录条目的规范中也提到了:

  

文档符合的PDF规范版本(例如,1.4),如果晚于文件标题中指定的版本(请参阅7.5.2,"文件标题")。如果标头指定更高版本,或者如果此条目不存在,则文档应符合标头中指定的版本。

     

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

关于提供的截图

OP提供了截图:

screenshot provided by the OP via mail

可以清楚地看到有问题的文件是线性化的(在左侧可以看到线性化参数字典,在右侧可以看到"快速Web查看:是")。在线性化参数字典之后,存在第一页的交叉引用,这些交叉引用作为交叉引用流提供,而不是交叉引用表。

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

我认为Adobe Reader声称版本为1.5,因为根据1.5之前的规范这种不可解决性。

  

我认为,我无法使用其他API从PDF获取1.5版本。是这样吗?

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

  

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

这个要求已经没有明确定义。什么 PDF版本1.3以及之前

  • 它是声称​​ 1.3或之前 的PDF文件?

    作为一个特例,那些声称不同版本的PDF呢?例如。标头和目录中的不同条目,或不同增量更新中的不同条目。如果其中一个不同的条目是1.3或之前,是 1.3还是之前?或者只有全部是1.3或之前?或者最新的目录版本条目是否需要为1.3或之前?

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

  • PDF是根据PDF参考 1.3或之前 有效吗?

  • 或者它是根据任何PDF参考 1.4和 之后无效的PDF?

唯一容易实现的是第一个变体(已决定特殊情况),但出版物上下文中最常见的客户意味着最后一个变体。

  

我们使用PDF工具箱-java jar检查pdf版本。其中pdf版本为1.3,因此验证失败。客户质疑其正确的pdf显示从打开PDF,文件>屏幕截图;属性。现在,下一步应该是什么?

下一步?与客户聚在一起,共同了解 PDF版本1.3及之前的含义。如果你还想实现它,那就重新考虑一下。这可能是某个人的事情。

答案 1 :(得分:0)

使用gostscript转换文件。 为此,这是Linux命令:

gs -o tempPdfFilePath -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 pdfFilePath && mv tempPdfFilePath pdfFilePath
  

请注意,您无法在同一文件上进行读写,因此您需要   临时文件名。