1

フォントを扱うのは初めてなので、専門用語はご容赦ください。

私がしていること: Python の PDFMiner を使用している多言語文字 (このコンテキストではグジャラート語) を含む PDF からテキストを抽出する必要があります。

どこで立ち往生していますか: PDFMiner は、ほとんどの文字を抽出するのに優れていますが、抽出できない文字ごとに、その文字の CID を提供します。(PDFで使用しているフォントファイルはShruti.ttf です)

例: テキスト પર્િસિદ્ધની તારીખ の場合、પર્િસિ(cid:263)ની તારીખ となります。ここでは દ્ધ が欠落しており、その CID は 263 で、フォント ファイル内のグリフ名は .notdef#134 です。

Python の TTX/FontTools を使用して Shruti.ttf ファイルからすべてのテーブルを抽出し、インデックス 263 の文字を確認しました。むしろその輪郭がそこに記載されています..

<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