所以我试图从pdf文件中提取文本,我需要它的位置,宽度,高度,字体。
我尝试了很多,但最有用和最完整的解决方案看起来是PDFMiner,在这种情况下,更确切地说是pdf2txt.py。
我已按照文档和示例操作,并尝试使用此命令从我的pdf中提取文本Learn More
:
pdf2txt.py -Y normal -t xml -o buttons.xml buttons.pdf
输出buttons.xml
看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="1" bbox="0.000,0.000,799.900,449.944" rotate="0">
<textbox id="0" bbox="164.979,213.240,247.680,235.944">
<textline bbox="164.979,213.240,247.680,235.944">
<text font="KZNUUP+HelveticaNeue-Bold" bbox="164.979,213.240,178.978,235.944" size="22.704">(cid:51)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="173.280,213.240,187.278,235.944" size="22.704">(cid:76)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="181.315,213.240,195.313,235.944" size="22.704">(cid:72)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="189.350,213.240,203.348,235.944" size="22.704">(cid:89)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="194.795,213.240,208.793,235.944" size="22.704">(cid:85)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="203.096,213.240,217.094,235.944" size="22.704">(cid:3)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="206.987,213.240,220.986,235.944" size="22.704">(cid:52)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="219.684,213.240,233.682,235.944" size="22.704">(cid:86)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="228.237,213.240,242.235,235.944" size="22.704">(cid:89)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="233.682,213.240,247.680,235.944" size="22.704">(cid:76)</text>
<text></text>
</textline>
</textbox>
<textgroup bbox="164.979,213.240,419.659,235.944">
<textbox id="0" bbox="164.979,213.240,247.680,235.944" />
</textgroup>
</page>
</pages>
第一个字符应为L和51 (cid:51)
似乎与我在句子中的任何字符都不匹配,关于ascii table和utf-8 table
正如标题所说,我想知道它是什么,以及如何使用这些(cid:51)...
?
所以我发现程序没有得到真正的字符(cid:%d),因为他不认识到它是一个unicode字符串。
首先调用此函数来编写char:
def render_char(self, matrix, font, fontsize, scaling, rise, cid):
try:
text = font.to_unichr(cid)
assert isinstance(text, unicode), text
except PDFUnicodeNotDefined:
text = self.handle_undefined_char(font, cid)
但assert
失败并触发被捕获的事件PDFUnicodeNotDefined
并致电:
def handle_undefined_char(self, font, cid):
if self.debug:
print >>sys.stderr, 'undefined: %r, %r' % (font, cid)
return '(cid:%d)' % cid
这就是我用包含所有这些文件的结尾(cid:%d)。
我是python的新手,我试图想出一种识别这些字符的方法,它应该是一个没有?有没有人有任何想法?
答案 0 :(得分:0)
了解如何解释 cid ,你需要知道一对事情:
相关字体的Registry-Ordering-Supplement(ROS)信息。它通常类似于Adobe-Japan1-5&#39;并且是存储在字体中的信息属性。 ROS确定如何解释CID。
使用ROS信息,选择兼容的CMap并通过它解码。您可以在http://sourceforge.net/projects/cmap.adobe/files/
有关发明人直接提供的CID和CMaps的更多信息,请访问http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf
检查decode CID font codes to equivalent ASCII characters以获取更多信息