在PDF文件中阅读日文字符

时间:2014-03-15 23:47:25

标签: pdf text unicode hex

我有以下命令:

并[d 0e0f0a52030d030e0ce5030f0744030f大于10< 030d→10< 0cd4>] TJ

我知道它在Hex部分中隐藏了日语,因为这是PDF中唯一的内容,而且这行是pdf文件中孤独页面的唯一内容流。

问题是无论我如何尝试解码这个十六进制字符串,我最终都是用Gibberish编写的,我已经将这些Hex字符串解码为字节,并尝试过应用我能找到的每个字符集,但我仍然会感到胡言乱语。

(也许我很绝望,因为我知道它可能不会那么好) 我也尝试过另一种方式,在Android上测试它,我能够导入pdf日文文本(从资源加载它),并且在调试时我可以在String实例的值中看到REAL日文文本,我再次尝试应用所有的字符集只产生一个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
...

2 个答案:

答案 0 :(得分:1)

这是你的问题:

  

我发现有一个额外的“加密”,Identity-H,我在这里读到你需要一个/ ToUnicode地图,我似乎无法在文件中找到它。

这表示文本字符串中的双字节十六进制代码是原始字体文件中的字形索引。在字体文件中搜索Unicode字符映射(其中一个cmap条目);这将提供从字形索引到Unicode的链接。

请注意,字形索引可能立即转换为Unicode代码点。 GSUBGPOS OpenType表可能已将一个或多个Unicode字符作为输入,并将其替换为输出字符串中的另一个字形。原始创建者也可以(但不太可能)手动插入原始字形。

答案 1 :(得分:1)

由于这里的大多数想法都是根本正确的,因此它们并不完整而且不准确,所以:

  • / ToUnicode可能出现在PDF文件中,但不是必须!!!
  • 有多种语言的外部预定/预定义CMap here

在错误的地方挖掘这么长时间非常令人沮丧,我已经将PDF变成了小块,并且已经浏览了文件中的所有流,找不到运气的地图,因为它没有文件!

我希望这可以拯救别人的麻烦...

相关问题