PDFminer 空输出

PDFminer empty output

在使用 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&#10;&#164;&#181;F&#164;5&#193;&#62;&#243;_&#253;v&#172;`</string>
<string size="16">on&#10;&#164;&#181;F&#164;5&#193;&#62;&#243;_&#253;v&#172;`</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&#10;&#164;&#181;F&#164;5&#193;&#62;&#243;_&#253;v&#172;`</string>
<string size="16">on&#10;&#164;&#181;F&#164;5&#193;&#62;&#243;_&#253;v&#172;`</string>
</list></value>
<key>Size</key>
<value><number>27</number></value>
</dict>
</trailer>

问题是 pdfminer 不理解您在此 PDF 中使用的 CMap。

如果你在 psparser.py 中打开 STRICT=1 的 pdfminer 自定义构建,你会得到一个类似这样的错误:

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}>

我不是很熟悉代码,但即使允许它通过也无济于事,因为它无法识别映射(即使我将名称硬编码为 OneByteIdentityH 并询问它查一下)。最终结果是 CMap 不包含任何映射,因此它将 PDF 中的每个字符转换为空字符串(好吧 None 如果我挑剔的话)。

修复可能是为此 CMap 创建一个映射,该映射只是 returns 传入的字符类似于 cmapdb.py

中已经实现的其他身份映射

现在我已经解决了 /OneByteIdentityH 的问题,类似于两字节 unicode 映射 /Identity-H 的代码。补丁在PR #179