What is this (cid:51) in the output of pdf2txt?
所以我试图从pdf文件中提取文本,我需要它的位置,宽度,高度,字体。
我尝试了很多,但是最有用和最完整的解决方案是PDFMiner,在这种情况下,更确切地说是pdf2txt.py。
我遵循了文档和示例,并尝试使用以下命令从我的pdf中提取文本
1 | pdf2txt.py -Y normal -t xml -o buttons.xml buttons.pdf |
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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> |
关于ascii表和utf-8表,第一个字符应该是L并且51
因此,正如标题所述,我想知道它是什么,以及如何使用这些
编辑
因此,我发现该程序不是获取真实字符,而是编写程序(cid:%d),因为他不知道这是一个unicode字符串。
它首先调用此函数来编写char:
1 2 3 4 5 6 | 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) |
但是
1 2 3 4 | 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的新手,我试图找出一种识别这些字符的方法,应该不是吗?有谁知道吗?
要了解如何解释cid,您需要了解以下几点:
所涉及字体的注册表订购补充(ROS)信息。 通常类似于" Adobe-Japan1-5",并且是存储在字体中的信息属性。 ROS确定如何解释CID。
有了ROS信息,选择一个兼容的CMap并对其进行解码。您可以在http://sourceforge.net/projects/cmap.adobe/files/中找到Adobe定义的ROS的CMap文件。
直接来自发明人的有关CID和CMap的更多信息可在http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf上获得。
有关更多信息,请检查将CID字体代码解码为等效的ASCII字符