确定文件是否是perl中的PDF?

时间:2016-04-01 03:47:41

标签: perl pdf

使用perl,确定文件是PDF的最佳方式是什么?

显然,并非所有PDFs都以%PDF开头。请参阅此答案的评论:https://stackoverflow.com/a/941962/327528

2 个答案:

答案 0 :(得分:1)

检测PDF并不难,但有一些需要注意的问题。

  1. 所有符合标准的PDF都包含一行标题,用于标识文件符合的PDF规范。通常它是%PDF-1.N,其中N是0到7之间的数字。
    • PDF Reference的第三版有一个实现说明,Acrobat viewer只要求标题出现在文件的前1024个字节中。 (我已经看到一些作业控制前缀被添加到PDF文件开头的情况,因此'%PDF-1。'不是文件的前七个字节)
    • 第三版(PDF 1.4)的后续实施说明指出:Acrobat观众也会接受表格的标题:%!PS-Adobe-Nn PDF-Mm但请注意,这不是ISO32000:2008(PDF 1.7)规范。
    • 如果文件没有立即开始使用%PDF-1.N,请小心,因为我发现包含PDF的zip文件被错误地识别为PDF的情况,因为该部分嵌入式文件没有被压缩。所以检查PDF文件预告片是个好主意。
  2. PDF的结尾将包含一行' %% EOF',
    • PDF Reference的第三版有一个实现说明,Acrobat viewer只要求%% EOF标记出现在文件的最后1024个字节内。
    • %% EOF之上的两行应该是' startxref' token和其间的行应该是从文件开头到最后一个交叉引用表的字节偏移量的数字。
  3. 总而言之,将文件的第一个和最后一个1kb读入一个字节缓冲区,检查相关的识别字节字符串标记是否大约应该在哪里,如果它们是,那么你有一个合理的期望,你有手上有PDF文件。

答案 1 :(得分:0)

模块PDF::Parse的方法名为 IsaPDF

  

如果文件可以被解析并且是PDF文件,则返回true。