如何从字体文件中获取复合字形的字符代码(Unicode)?

时间:2013-11-26 09:26:42

标签: unicode fonts multilingual glyph pdftotext

这是我第一次使用字体,所以请用行话来表示。

我在做什么: 我必须从包含多语言字符的PDF中提取文本(在此上下文中为Gujarati),我正在使用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。

感谢。

0 个答案:

没有答案