PDF文件衍生自PostScript,最初用记事本就可以打开编辑。随着PDF嵌入的内容功能越来越多,有些二进制的图像和音视频数据,就出现了stream,以及对PDF压缩的需求。
在2008年1月,PDF成为了ISO标准(ISO 32000),截止目前停留在1.7版本。
如果你用notepad++,以文本的方式尝试打开PDF文件,基本可以看清文件的结构。但它总希望被认为是一个二进制文件,最好以binary的方式读取。为了达到这个目的,会在标题行后紧跟一个注释行,要求至少包含四个二进制字符(byte最高位为1),这样就差不多能让很多App识别出这是一个二进制文件。
以下片段,用记事本另存为PDF,就是正常的PDF文件
%PDF-1.1
%¥±?
1 0 obj
<< /Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<< /Type /Pages
/Kids [3 0 R]
/Count 1
/MediaBox [0 0 200 144]
>>
endobj
3 0 obj
<< /Type /Page
/Parent 2 0 R
/Resources << /Font << /F1 << /Type /Font /Subtype /Type1/BaseFont /Times-Roman
>>
>>
>>
/Contents 4 0 R
>>
endobj
4 0 obj
<< /Length 55 >>
stream
BT
/F1 18 Tf
0 0 Td
(Hello World) Tj
ET
endstream
endobj
xref
0 5
0000000000 65535 f
0000000018 00000 n
0000000077 00000 n
0000000178 00000 n
0000000457 00000 n
trailer
<< /Root 1 0 R
/Size 5
>>
startxref
565
%%EOF
拷贝上述内容,保存为PDF文件打开,你将看到:
总结:
1.PDF版本号,在文件开头处:%PDF-1.7
2.PDF第二行乱码没啥用,随便4个高字节为1的byte:%a??ó
本次先分享到这,哈不太习惯头条的编辑发布,搞得有点麻烦。下次,我再分享一段python代码用于解析PDF的结构。