【发布时间】:2020-04-22 14:30:19
【问题描述】:
我正在尝试使用非常奇怪的 ToUnicode CMap 解析 PDF 文件。它将 CID 映射为错误的 unicode,但在 Mac 或 Acrobat 上的 Preview 可以正确显示。
这是页面对象:
7 0 obj
<<
/Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 595.5 842.25 ]
/Group <<
/Type /Group
/S /Transparency
/CS /DeviceRGB
>>
/Resources <<
/Font <<
/F0 4 0 R
/F1 5 0 R
/F2 6 0 R
>>
/XObject <<
/Im0 2 0 R
>>
/ProcSet [ /PDF /Text /ImageC ]
>>
/Contents 3 0 R
>>
endobj
这是 Contents 对象的摘录,内容类似于 Client Name::
3 0 obj
<<
/Length 2490
/Filter /FlateDecode
>>
stream
q
294.80 0 0 45.35 40.19 768.05 cm
/Im0 Do
Q
q
39.44 665.25 106.38 15.67 re
W
n
/F0 11 Tf
0.00 0.00 0.00 rg
BT
41.69 538.82 Td
<0012016F015D011E0176019A0003004501020175011E0357> Tj
ET
...
这是字体 /F0 对象:
4 0 obj
<<
/Type /Font
/Subtype /Type0
/BaseFont /Calibri
/Encoding /Identity-H
/DescendantFonts [ 12 0 R ]
/ToUnicode 10 0 R
>>
endobj
而且,这是 Font /F0 对象的 ToUnicode 对象的摘录:
10 0 obj
<<
/Length 584
/Filter /FlateDecode
>>
stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
/Ordering (UCS)
/Ordering (Identity)
/Supplement 0
>> def
/CMapName /Calibri def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
67 beginbfchar
<0012> <0043>
<016F> <006C>
<015D> <0001>
<011E> <0065>
<0176> <0001>
<019A> <0074>
<0003> <0020>
<0045> <004E>
<0102> <0061>
<0175> <0001>
<0357> <003A>
...
有了这个ToUnicode CMap,上面文字中的字符变成了Cl\x01e\x01t Na\x01e:,嵌入了一堆\x01,其余的都是正常的。但是,在 Acrobat 中,此文本显示正确。
Acrobat 如何正确解析文本?我该怎么做才能以 unicode 检索正确的文本?谢谢。
【问题讨论】:
-
“但是,在 Acrobat 中,此文本显示正确。” - 您的意思是 Acrobat 显示 正确的字形还是 从中复制和粘贴会返回正确的 unicode 字符吗?
标签: pdf unicode pdf-generation