python %PDF-不在文件开头-但为什么?

j2datikz  于 2024-01-05  发布在  Python
关注(0)|答案(2)|浏览(131)

我有几个PDF文件,我试图通过Python代码读取文件的开头,以确认文件是PDF格式/标题。(Python部分对这个问题并不是100%重要)。
我在各种文件的开头看到以下内容:
示例一(前34个字节为十六进制-无法以任何其他方式看到模式):

  1. b'u\xabZj\x9ae\x89\xc6\xad\x8a\x89\xff\xc7\xe7h\xc2yhi\xd6\xda\xb1\xee\xb8%PDF-1.2\r%'

字符串
示例文件二(ASCII格式):

  1. 2 J
  2. %PDF-1.7


示例文件三等:

  1. \r\n%PDF-1.2


或者:

  1. \r\n\r\n\r\n\r\n%PDF-1.4


我可以处理这些文件(带有换行符/回车符)(即使我看不到头规范中允许的内容)。
我在Linux上的/usr/share/file/magic/pdf中看到了\xef\xbb\xbf%PDF-。这是定义的用法(即Unicode和字节排序信令)。它很容易处理。
我需要有关上述#1和#2格式的帮助。为什么我在文件开头看到这些字节?它们意味着什么?这些值的好参考在哪里?或者它们只是一个错误?(有问题的文件在MacOS上打开干净)。
提前感谢-马丁

64jmpszr

64jmpszr1#

一个有效的PDF文件必须以%PDF-行开头。在这之前的任何内容都将使您的文件成为一个非PDF文件,仅(可能)包含一个PDF文件。
很久以前,Adobe决定,虽然,也支持这样的文件与一些任意前导字节(高达1KB,我认为)直接在他们的Acrobat和Reader软件,和许多其他pdf处理器软件产品效仿他们的例子。
尽管如此,根据规范,这些文件本身不是pdf文件,既不是你的四个例子,也不是任何带有BOM的文件。
尽管如此,
我需要有关上述#1和#2格式的帮助。为什么在文件开头看到这些字节?它们是什么意思?这些值的参考在哪里?或者它们只是一个错误?
就所包含的pdf文件而言,那些额外的字节是可以忽略的垃圾。。
它们通常没有意义。有时它们被添加是因为pdf创建程序的错误,有时它们被添加是因为传输错误。有些人试图利用Adobe软件的这种松散性将他们自己的元数据添加到PDF中。

lnxxn5zx

lnxxn5zx2#

我的Python代码基于收到的答案:

  1. def ispdf(s):
  2. idx = 0
  3. while s[idx] in [b'\r', b'\n']:
  4. idx += 1
  5. # Simple %PDF- starter
  6. if s[idx:idx+5] == b'%PDF-':
  7. return True
  8. # maybe ... \xef\xbb\xbf%PDF- ... which is U+FEFF - the byte order mark, or BOM
  9. if s[idx:idx+8] == b'\xef\xbb\xbf%PDF-':
  10. return True
  11. # check further down the file - which seems messy and in-fact is!
  12. # https://stackoverflow.com/questions/77753113/pdf-not-at-start-of-file-but-why
  13. if b'%PDF-' in s[0:1024]:
  14. return True
  15. # give up!
  16. return False

字符串
有时灵

展开查看全部

相关问题