【发布时间】:2014-04-21 07:00:04
【问题描述】:
我有以下命令:
[1010]TJ
我知道它在 Hex 部分隐藏了日语,因为这是 PDF 中唯一的内容,而这一行是 pdf 文件中一个单独页面的唯一内容流中。
问题是无论我如何尝试解码这些十六进制字符串,我最终都会得到乱码,我已经将这些十六进制字符串解码为字节,并尝试逐字应用我能找到的每个字符集,但我仍然得到乱码。
(也许我很绝望,因为我知道它可能无法正常工作) 我也尝试过另一种方法,在 Android 上进行测试,我可以导入 pdf 日文文本(从资源中加载),在调试时我可以在 String 实例的值中看到真正的日文文本,我再次尝试应用所有字符集,只为整个文件生成 4-6 个匹配的十六进制字符,但再次......什么都没有。
我实际上不需要字形,我会选择正确的文本...
可能是文本本身是由字符集编码以外的东西编码的吗? 谁能指出我正确的方向?
=== 更新 ===
好的,所以我发现有一个额外的“加密”,Identity-H,我有 read here,你需要一个 /ToUnicode 映射,我似乎在文件中找不到。
让我抓狂的是其他 PDF 查看器可以显示 PDF,但我不知道如何!
再一次,任何骨头都会很好......我会去寻找碎片:)
谢谢,
亚当。
对于某些文件上下文:
...
10 0 obj
<<
/Type /Page
/Parent 7 0 R
/Resources 11 0 R
/Contents 16 0 R
/MediaBox [ 0 0 595 842 ]
/CropBox [ 0 0 595 842 ]
/Rotate 0
>>
endobj
11 0 obj
<<
/ProcSet [ /PDF /Text ]
/Font << /TT2 13 0 R /G1 12 0 R >>
/ExtGState << /GS1 19 0 R >>
/ColorSpace << /Cs6 15 0 R >>
>>
endobj
12 0 obj
<<
/Type /Font
/Subtype /Type0
/BaseFont /Ryumin-Light-Identity-H
/Encoding /Identity-H
/DescendantFonts [ 18 0 R ]
>>
endobj
13 0 obj
<<
/Type /Font
/Subtype /TrueType
/FirstChar 32
/LastChar 32
/Widths [ 278 ]
/Encoding /WinAnsiEncoding
/BaseFont /Century
/FontDescriptor 14 0 R
>>
endobj
14 0 obj
<<
/Type /FontDescriptor
/Ascent 985
/CapHeight 0
/Descent -216
/Flags 34
/FontBBox [ -165 -307 1246 1201 ]
/FontName /Century
/ItalicAngle 0
/StemV 0
>>
endobj
15 0 obj
[
/ICCBased 20 0 R
]
endobj
16 0 obj
<< /Length 2221 /Filter /FlateDecode >>
stream
...
[<0e0f0a52030d030e0ce5030f0744030f>10<030d>10<0cd4>]TJ
...
<00e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e700e7>Tj
...
<030e030d0a48064403740353035a039408030ebd074807c1036e0358039304e10c8802a2074807c10cd40e8a030e030d02a303770a2a0a100374036d034d036f00e7>Tj
...
endstream
endobj
17 0 obj
<<
/Type /FontDescriptor
/Ascent 723
/CapHeight 709
/Descent -241
/Flags 6
/FontBBox [ -170 -331 1024 903 ]
/FontName /Ryumin-Light
/ItalicAngle 0
/StemV 69
/XHeight 450
/Style << /Panose <010502020300000000000000>>>
>>
endobj
18 0 obj
<<
/Type /Font
/Subtype /CIDFontType0
/BaseFont /Ryumin-Light
/FontDescriptor 17 0 R
/CIDSystemInfo << /Registry (Adobe)/Ordering (Japan1)/Supplement 2 >>
/DW 1000
/W [ 231 [ 500 ] ]
>>
endobj
19 0 obj
<<
/Type /ExtGState
/SA false
/SM 0.02
/TR2 /Default
>>
endobj
20 0 obj
<< /N 3 /Alternate /DeviceRGB /Length 2572 /Filter /FlateDecode >>
stream
...
endstream
endobj
...
【问题讨论】:
-
我发现文本中有一个 Identitiy-H“编码/加密”,但文件中的 /ToUnicode 映射没有任何证据......任何指针?跨度>
-
您显示的十六进制八位字节似乎不是标准的 UTF 或 ANSI 字符集编码,它包含 ASCII 可视范围之外的八位字节(0x00、0x03、0x0E 等),所以有可能涉及到您尚未考虑的另一层编码。
-
您需要一个 /ToUnicode 映射,我似乎在文件中找不到它。让我抓狂的是其他 PDF 查看器可以显示 PDF,而我不知道如何显示! - 您需要 ToUnicode 来规范地检索 PDF 表示的 Unicode 字符,而不是 显示 PDF。要显示它,您只需要了解字体。在您的情况下,
/Registry (Adobe)/Ordering (Japan1)/Supplement 2请查看 Adobe 技术说明 #5078-b Adobe-Japan1-2 Character Collection for CID-Keyed Fonts。 -
mkl, "Show the DPF" 是一个糟糕的词选择(沮丧...),我已经将十六进制与字体进行了比较,你是对的,这些是我需要的字体!所以你说的是我需要将十六进制值映射到文件中的字符....如果我做对了,这应该是我麻烦的关键:sourceforge.net/projects/cmap.adobe/files/… 问题是......我该怎么做所有这些数据的意义?开始新的冒险:)