这是我第一次使用字体,所以请用行话来表示。
我在做什么: 我必须从包含多语言字符的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。
感谢。