【问题标题】:What is this (cid:51) in the output of pdf2txt?pdf2txt 的输出中的这个 (cid:51) 是什么?
【发布时间】:2013-05-13 13:50:43
【问题描述】:

所以我正在尝试从 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 tableutf-8 table

所以正如标题所说,我想知道它是什么,以及如何使用这些(cid:51)...


编辑

所以我发现程序写入的不是真正的字符 (cid:%d),因为他不承认这是一个 unicode 字符串。

它首先调用这个函数来写字符:

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 还很陌生,我试图找出一种方法来识别这些字符,它应该是一个不?有人知道吗?

【问题讨论】:

  • 我在 github repo 上发布了an issue,但仍然没有答案...
  • 这是我创建的useful GitHub repo,用于轻松从 pdf ans psd 文件中提取内容(图像和文本转换为 json)
  • 但是我的问题仍然没有解决。
  • 只是想知道this cid table is useful

标签: python xml pdf-parsing


【解决方案1】:

要了解如何解释cid,你需要知道两件事:

  1. 相关字体的 Registry-Ordering-Supplement (ROS) 信息。它通常类似于“Adobe-Japan1-5”,是存储在字体中的信息属性。 ROS 决定如何解释 CID。

  2. 使用 ROS 信息,选择兼容的 CMap 并通过它进行解码。您可以在 http://sourceforge.net/projects/cmap.adobe/files/ 找到 Adob​​e 定义的 ROS 的 CMap 文件

直接从发明者那里获得有关 CID 和 CMap 的更多信息,请访问http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf

查看decode CID font codes to equivalent ASCII characters了解更多信息

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2021-09-26
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多