Ike*_*iro 4 python regex pdf parsing
我试图使用Python的re模块解析PDF文件中的一些对象元素.我的目标是使用正则表达式解析每个PDF对象.PDF对象示例如下:
1 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/Kids [ 3 0 R ]
/Count 1
>>
endobj
...
Run Code Online (Sandbox Code Playgroud)
当我使用"\d+\s\d+\sobj[\s,\S]*endobj"它时不起作用(它保持解析util last endobj被发现).如何修改正则表达式以便单独解析每个对象(换句话说,从10 0 obj到endobj的部分)?
如果您只使用正则表达式,则很容易构建程序无法处理的PDF文件.PDF词典和列表可以包含其他对象.正则表达式无法处理递归结构,至少不能处理Python re模块.
pdf文件是对象和流的树:
<<名称值)*>>[价值)*]/常规字符)*(字符)*)<(hexchar)*>-)?((数字)+ |(数字)+ .(数字)*| .(数字)+)true|falseR大多数地方都忽略了空格和注释.注释以行开头%并一直运行到行尾.
间接对象指定为:
1 0 obj
(any object)
endobj
Run Code Online (Sandbox Code Playgroud)
然后可以将此对象引用为1 0 R.间接词典也可以附加一个流:
1 0 obj
<<
/Length 22
>>
stream
(22 bytes of raw data)
endstream
endobj
Run Code Online (Sandbox Code Playgroud)
PDF文件看起来像这样:
%PDF-1.4
%ÿÿÿÿ
1 0 obj
<< /Author (MizardX) >>
endobj
2 0 obj
<<
/Type /Catalog
% more required keys
>>
endobj
%lots of more indirect objects, one after another
trailer
<<
/Info 1 0 R
/Root 2 0 R
% ... more required keys
>>
xref
0 3
0000000000 65535 f
0000000015 00000 n
0000000054 00000 n
startxref
225
%%EOF
Run Code Online (Sandbox Code Playgroud)
对象树的根是trailer对象.每个对象都直接或间接从该字典中引用.
流中隐藏了更多复杂性,但这不会影响文件结构.
完整的规范可以在Adobe的网站上找到.
| 归档时间: |
|
| 查看次数: |
4581 次 |
| 最近记录: |