2016-08-25 4 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>}} 

어도비 glyphlist.txt이 (pdf-reader/lib/pdf/reader/glyphlist.txt에서 복제)에만 summation, 그리고 summationtextsummationdisplay, @differencesPDF::Reader::Encoding#differences=@mapping에 적용되지 않으며, @state.current_font.to_utf8(1)을 포함하는 것은 올바른을 가져 오는 데 실패 때문에

글리프 (글리프 코드를 대체 문자로 반환하므로 결국은 \u0001으로 끝납니다). 나는. PDF 글꼴 개체 내의 글꼴 매핑 차이는 (내 이해에 따라) 마스터 글리프 목록에서 이름으로 참조 글리프를 참조해야하지만이 두 가지는 일치하지 않습니다.

무엇이 누락 되었습니까? summationdisplaysummationtext이 Adobe의 glyphlist.txt에 없으면 다른 PDF 리더가이 글꼴을 올바르게 렌더링합니까?

답변

1

이것은 사용자 지정 인코딩과 비표준 글리프 이름이있는 글꼴 하위 집합을 정의합니다. 또한 사용자 정의 인코딩에서 역 매핑을 포함하지 않습니다.

9.10.1 일반

...

문자 내용을 추출, 규격에 부합하는 독자가 쉽게

9.10 추출 텍스트 내용의 :

PDF-32000 Specification

이 시나리오를 커버 일치하는 독자가 알고있는 표준 문자 집합에 따라 글꼴의 문자가 식별되면 텍스트를 유니 코드 값으로 변환합니다. 이 문자 식별은 글꼴이 표준 명명 된 인코딩을 사용하거나 글꼴의 문자가 잘 알려진 컬렉션의 표준 문자 이름 또는 CID로 식별되는 경우 발생할 수 있습니다. 9.10.2, "문자 코드를 유니 코드 값에 매핑"에서는 문자 코드를 유니 코드 값에 매핑하는 전체 알고리즘을 자세히 설명합니다.

글꼴은 다음 중 한 가지 방법으로 정의되지 않은 경우

는 상형 문자는 여전히 표시 될 수 있지만 문자는 추가 정보없이 유니 코드 값으로 변환 할 수 없습니다

이 정보는 선택의 ToUnicode로 제공 될 수 • (PDF 1.2; 9.10.3, "ToUnicode CMaps"참조).이 값은 문자 코드를 유니 코드 값에 매핑하는 특수한 종류의 CMap 파일을 포함하는 스트림 객체 여야합니다.

은 위와 일치하는 것으로 보입니다. /summationdisplay\u0001에 매핑 된 맞춤 하위 집합 인코딩이 있습니다. 렌더링 할 수있는 충분한 정보가 있지만 글꼴을 유니 코드로 역 매핑하지 않아야합니다.

+0

내가 듣고 싶지 않은 내용 :(하지만 완벽한 대답. 감사합니다. – Amadan