使用pdfminer(pdf2txt.py)处理file时,我收到空输出:
dan@work:~/project$ pdf2txt.py docs/homericaeast.pdf
dan@work:~/project$
有人可以说这个文件有什么问题吗?我可以做些什么来从中获取数据?
此处dumppdf.py docs/homericaeast.pdf
输出:
<trailer>
<dict size="4">
<key>Info</key>
<value><ref id="2" /></value>
<key>Root</key>
<value><ref id="1" /></value>
<key>ID</key>
<value><list size="2">
<string size="16">on ¤µF¤5Á>ó_ýv¬`</string>
<string size="16">on ¤µF¤5Á>ó_ýv¬`</string>
</list></value>
<key>Size</key>
<value><number>27</number></value>
</dict>
</trailer>
<trailer>
<dict size="4">
<key>Info</key>
<value><ref id="2" /></value>
<key>Root</key>
<value><ref id="1" /></value>
<key>ID</key>
<value><list size="2">
<string size="16">on ¤µF¤5Á>ó_ýv¬`</string>
<string size="16">on ¤µF¤5Á>ó_ýv¬`</string>
</list></value>
<key>Size</key>
<value><number>27</number></value>
</dict>
</trailer>
答案 0 :(得分:4)
现在我用/OneByteIdentityH
修复了问题,类似于双字节unicode映射/Identity-H
的代码。该补丁位于PR #179
答案 1 :(得分:2)
问题是pdfminer
无法理解您在此PDF中使用的CMap。
如果您在STRICT=1
中执行pdfminer切换psparser.py
的自定义构建,则会收到类似这样的错误:
pdfminer.psparser.PSTypeError: Literal required: <PDFStream(21): raw=267, {u'Filter': /'FlateDecode', u'CMapName': /u'OneByteIdentityH', u'Type': /u'CMap', u'CIDSystemInfo': <PDFObjRef:20>, u'Length': 266}>
我对代码并不十分熟悉,但即使允许这样做也无济于事,因为它无法识别映射(即使我将名称硬编码为{{1}并要求它看起来那样)。最终结果是CMap不包含映射,因此它将PDF中的每个字符转换为空字符串(如果我挑剔的话,那么OneByteIdentityH
就好了。)
修复可能是为这个CMap创建一个映射,它只返回传递的字符,类似于None
中已实现的其他Identity映射