2016-08-25 16 views
0

pdf-reader gemでPDFを処理しようとしています。大体は問題ありませんが、合計記号が必要な場合は\u2211の代わりに\u0001が得られます。関連するフォントオブジェクトは、次のとおりです。PDFでの認識できないグリフ(合計、合計)

{:Type=>:Font, 
:Subtype=>:Type1, 
:FirstChar=>1, 
:LastChar=>2, 
:Widths=>[1444, 1056], 
:Encoding=>{:Type=>:Encoding, :Differences=>[1, :summationdisplay, :summationtext]}, 
:BaseFont=>:"APHKGN+CMEX10", 
:FontDescriptor=> 
    {:Type=>:FontDescriptor, 
    :Ascent=>0, 
    :CapHeight=>0, 
    :Descent=>0, 
    :Flags=>4, 
    :FontBBox=>[0, -1400, 1387, 0], 
    :FontName=>:"APHKGN+CMEX10", 
    :ItalicAngle=>0, 
    :StemV=>47, 
    :StemH=>47, 
    :CharSet=>"/summationdisplay/summationtext", 
    :FontFile3=> 
    #<PDF::Reader::Stream:0x007faab138a528 
    @data= 
     "H\x89bd`ab`dd\xE4s\f\xF0\xF0v\xF7\xD3v\xF6u\x8D04\x00\x89(\xFD\x90e\xFC!\xCE\xF2C\x8EG\xACX\xE6K\x81\f\xEB\xBA\x9F3X\xBF;\xF1\x7Fw\x13\xF8\xEE%\xB8\xE2\x87\xA7\x10\x03\vP\x9F\\rfqinnbIf~^IjE\t\x9C\x93\x92Y\\\x90\x93X\xE9\x9C_PY\x94\x99\x9EQ\xA2\xA0\xE1\xAC\xA9`hii\xAE\xE0\x98\x9BZ\x94\x99\x9C\x98\xA7\xE0\x9BX\x92\x91\nR\x9D\x9C\x98\xA3\x10\x9C\x9F\x9C\x99ZR\xA9\xA7\xE0\x98\x93\xA3\x10\x04\xD2Q\xAC\x10\x94Z\x9CZT\x96\x9A\x02u\x15\xD0Y\xED\x8C\fL\x01\x11\f\xCC\x8C\x8C\xECE?\xFF3\xFA\x86\x86\xF1\xFDg\x91\xEFO\xF8Ws\xE8\x97\xECf\xC6\x1F\xD5\x7Ff\x88N\x9A\xD2\xDB\xD7/\xD5\xDF\xD5\xD3:E\xEE\xF7\xCD\x1FA\xAC?\x14\xD8\xBE\xB3}\xAFj\xF9\xED\x7FQ~\t\x9B\xE9\xF7:\xD6\xBF\x17\xD9\n\xBA\xBAr\xE4\x7F0\xFE\xE9\xFA\xFD\xFD\x8F7kscWg\xBBT\xC3\x94\xEE\xB9r?/\xB2=\xFC\xDE\xCBZ\xC4V\xE4\xE0\xE1g\x96\xC7\xD1V\xEDV\xFC[]\xFA\x8F-\e\xDF\x7F\xD6%\x85'd~u<\x92a\xF9\xB8\x9BQ\x86\xE5\x13\x90-\xFA\x9D\xF7\xFB\x15\xA0\xEA\x14eE\xF7\xDF\xEC\xB9\x1Cme\x9A\x85\xBFC\xA4\xFF\xBCg\xFB1\xF1\xC7K\xD6I\x93{\xFB&H\xF5v\xF7\xB5L\x95\xFB\x93\xF6S\x90\xF5\xC7\x0E\xB6\xEFR\xCFj;\xA7\xC8\x1Fl~Tu+rI\xF5\xF9\xB8\xB5V\x1CK\xD8~\xF3~_\xCB*\xF3;\x89\xAD\xA4\xAB\xAB\xB5C\xBE\xAB\xA3\xBB\xA2A\xEA\xC7\xD2\xBF\x19\x7Ff\xFD\xF9\xCC\xDAX\xDF\xDD\xD6\x05q _\xF9|6\x99\xDF\x95\xF3\xD9\xE5\x16\xB8O\x9D9\xE3?\x0F\xE7.\xAE]\xDC\x9B'\xF1\xF0\x001/@\x80\x01\x00J\xBC\xBFN\n", 
    @hash={:Filter=>:FlateDecode, :Length=>464, :Subtype=>:Type1C}, 
    @udata=nil>}} 

pdf-reader/lib/pdf/reader/glyphlist.txtで複製)アドビglyphlist.txtのみsummation、およびないsummationtextsummationdisplayが含まれているので、@differencesPDF::Reader::Encoding#differences=@mappingに適用されません、と@state.current_font.to_utf8(1)は正しいを取得するために失敗しましたグリフ(私は\u0001で終わるので、それはフォールバックとしてグリフコードを返します)。私。 PDFフォントオブジェクト内のフォントマッピングの違いは、私の理解によれば、名前でマスターグリフリストのグリフを参照する必要がありますが、これらの2つは一致しません。

私には何が欠けていますか? summationdisplaysummationtextがAdobeのglyphlist.txtにない場合、他のPDFリーダーでこのフォントを正しくレンダリングするにはどうすればよいですか?

答えて

1

これは、カスタムエンコーディングと非標準のグリフ名を持つフォントサブセットを定義しています。さらに、それは、カスタムエンコーディングからの逆マッピングを含まない(ToUnicode)。

9.10.1一般

...

文字コンテンツを抽出し、適合する読者が簡単にでき

9.10抽出テキストコンテンツの:

PDF-32000 Specification

は、このシナリオをカバー一致するリーダーが認識している標準の文字セットに従ってフォントの文字が識別された場合、テキストをUnicode値に変換します。この文字の識別は、フォントが標準の名前付きエンコードを使用するか、またはフォントの文字が標準文字名またはCIDでよく知られたコレクションで識別される場合に発生します。 9.10.2「Unicode値への文字コードのマッピング」では、文字コードをUnicode値にマッピングするための全体的なアルゴリズムについて詳しく説明します。

フォントはこれらのいずれかの方法で定義されていない場合、グリフはまだ表示することができますが、文字は、追加情報なしUnicode値に変換することはできません。

この情報は、オプションのToUnicodeとして提供することができます(PDF 1.2; 9.10.3、 "ToUnicode CMaps"参照)、その値は文字コードをUnicode値にマップする特別な種類のCMapファイルを含むストリームオブジェクトになります。

は上記に準拠しているようです。 /summationdisplay\u0001にマップされたカスタムサブセットエンコードがあります。レンダリングするのに十分な情報がありますが、フォントをUnicodeに逆マップすることはできません。

+0

私が聞きたいと思うものではありません。 – Amadan

関連する問題