1

这是我第一次使用字体的经验,所以请忍受行话。

我在做什么: 我必须从包含多语言字符(古吉拉特语,在这种情况下)的 PDF 中提取文本,为此我使用 Python 的 PDFMiner。

我在哪里卡住 了:PDFMiner 在提取大多数字符方面做得很好,但是,对于它无法提取的每个字符,它都会给我一个该字符的 CID。(PDF 中使用的字体文件是Shruti.ttf

例如:对于文本 પર્િસિદ્ધની તારીખ,它给出 પર્િસિ(cid:263)ની તારીખ。这里缺少દ્ધ,其CID为263,字体文件中的字形名称为.notdef#134

我使用 Python 的 TTX/FontTools 从 Shruti.ttf 文件中提取了所有表格,以检查索引 263 上的字符。显然,દ્ધ 是复合字形,它所包含的简单字形在“glyf”表中未提及,而是在那里提到了它的轮廓..

<TTGlyph name=".notdef#134" xMin="11" yMin="-76" xMax="1285" yMax="1352">
  <contour>
    <pt x="844" y="515" on="0"/>
    <pt x="898" y="579" on="1"/>
    <pt x="843" y="624" on="0"/>
    <pt x="843" y="691" on="1"/>
    <pt x="843" y="745" on="0"/>
    <pt x="924" y="828" on="0"/>
    <pt x="977" y="828" on="1"/>
    <pt x="1034" y="828" on="0"/>
    <pt x="1125" y="746" on="0"/>
    <pt x="1125" y="690" on="1"/>
    <pt x="1125" y="594" on="0"/>
    <pt x="1061" y="521" on="1"/>
    <pt x="1285" y="79" on="1"/>
    <pt x="1171" y="0" on="1"/>
    <pt x="1014" y="289" on="0"/>
    <pt x="951" y="422" on="1"/>
    <pt x="951" y="226" on="0"/>
    <pt x="850" y="84" on="1"/>
    <pt x="737" y="-76" on="0"/>
    <pt x="548" y="-76" on="1"/>
    <pt x="423" y="-76" on="0"/>
    <pt x="338" y="2" on="1"/>
    <pt x="249" y="82" on="0"/>
    <pt x="249" y="206" on="1"/>
    <pt x="11" y="306" on="0"/>
    <pt x="11" y="655" on="1"/>
    <pt x="143" y="655" on="1"/>
    <pt x="140" y="325" on="0"/>
    <pt x="331" y="325" on="1"/>
    <pt x="376" y="325" on="0"/>
    <pt x="389" y="378" on="1"/>
    <pt x="500" y="311" on="1"/>
    <pt x="465" y="233" on="0"/>
    <pt x="385" y="206" on="1"/>
    <pt x="385" y="136" on="0"/>
    <pt x="435" y="95" on="1"/>
    <pt x="480" y="58" on="0"/>
    <pt x="552" y="58" on="1"/>
    <pt x="668" y="58" on="0"/>
    <pt x="743" y="157" on="1"/>
    <pt x="811" y="247" on="0"/>
    <pt x="813" y="367" on="1"/>
    <pt x="599" y="356" on="0"/>
    <pt x="445" y="463" on="1"/>
    <pt x="276" y="581" on="0"/>
    <pt x="276" y="790" on="1"/>
    <pt x="276" y="988" on="0"/>
    <pt x="404" y="1065" on="1"/>
    <pt x="425" y="1078" on="0"/>
    <pt x="640" y="1142" on="1"/>
    <pt x="768" y="1180" on="0"/>
    <pt x="768" y="1282" on="1"/>
    <pt x="768" y="1352" on="1"/>
    <pt x="929" y="1352" on="1"/>
    <pt x="929" y="1280" on="1"/>
    <pt x="929" y="1107" on="0"/>
    <pt x="802" y="1048" on="1"/>
    <pt x="684" y="1014" on="0"/>
    <pt x="566" y="980" on="1"/>
    <pt x="439" y="930" on="0"/>
    <pt x="439" y="779" on="1"/>
    <pt x="439" y="649" on="0"/>
    <pt x="526" y="579" on="1"/>
    <pt x="605" y="515" on="0"/>
    <pt x="738" y="515" on="1"/>
  </contour>
  <instructions><assembly>
      NPUSHB[ ]  /* 135 values pushed */
      71 62 1 153 59 1 104 59 1 107 46 155 46 2 89 39 1 118 27 134 27 150 27 3 118
      18 1 57 14 73 14 2 25 12 57 12 73 12 3 52 4 53 13 153 12 1 12 9 30 26
      0 31 32 31 48 31 64 31 160 31 5 31 31 33 41 16 11 9 1 15 15 47 3 63 3
      2 3 9 66 26 16 25 33 16 0 23 16 23 32 23 160 23 4 23 23 0 25 16 25 32
      25 160 25 4 25 60 4 15 45 31 45 47 45 3 45 15 41 64 58 5 49 31 33 30 26
      28 5 23 33 33 37 1 11 26 6
      PUSHW[ ]  /* 1 value pushed */
      -64
      PUSHB[ ]  /* 4 values pushed */
      15 18 72 6
      PUSHW[ ]  /* 1 value pushed */
      -64
      NPUSHB[ ]  /* 24 values pushed */
      9 12 72 49 6 26 26 6 49 3 52 64 5 41 41 37 52 0 19 5 37 12 13 2
      SVTCA[0]
      MIAP[1]
      SHP[1]
      MDRP[10100]
      MIRP[01101]
      MIAP[1]
      SRP2[ ]
      IP[ ]
      MDAP[1]
      MIRP[01101]
      SRP1[ ]
      SLOOP[ ]
      IP[ ]
      MDAP[1]
      MDAP[1]
      MDAP[1]
      CALL[ ]
      CALL[ ]
      SRP1[ ]
      IP[ ]
      IP[ ]
      SRP2[ ]
      IP[ ]
      MDAP[1]
      MDRP[00000]
      MIRP[01101]
      SRP1[ ]
      IP[ ]
      SRP1[ ]
      IP[ ]
      SRP0[ ]
      MIRP[01101]
      SRP1[ ]
      SRP2[ ]
      IP[ ]
      SVTCA[1]
      MDAP[1]
      DELTAP1[ ]
      MIRP[01101]
      MDRP[01110]
      DELTAP1[ ]
      IP[ ]
      MDAP[1]
      DELTAP1[ ]
      MIRP[01101]
      SRP0[ ]
      MIRP[01101]
      SRP0[ ]
      MDRP[10110]
      MDRP[01101]
      DELTAP1[ ]
      IP[ ]
      MDAP[1]
      IP[ ]
      SRP2[ ]
      IP[ ]
      MIRP[01101]
      SRP1[ ]
      IP[ ]
      MDAP[1]
      DELTAP1[ ]
      SRP2[ ]
      IP[ ]
      SRP0[ ]
      MDRP[00110]
      DELTAP1[ ]
      SHP[0]
      MDRP[10100]
      MIRP[01101]
      IUP[1]
      IUP[0]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
      DELTAP1[ ]
    </assembly></instructions>
</TTGlyph>

首先,我需要知道我的方法是否正确,或者是否有更好的方法来实现这一点,其次,给定复合字形 CID,我如何获得其组成字形的 Unicode。

谢谢。

4

0 回答 0