为什么可以复制带有嵌入字体的 pdf 文档但无法在 pdf 中搜索 reader

Why a pdf document with embedded fonts can be copied but is not searchable in pdf reader

我正在编写一个带有嵌入式子集字体的 pdf 文件。根据需要,我包括了 ToUnicode 和 CIDSet 对象。为了进行测试,我创建了一个包含两个希伯来字符的简单 PDF。我可以 select 这两个字符并复制到剪贴板,然后将其正确粘贴到另一个应用程序(例如 Word)中。但是我无法搜索包含这两个字符的单词。 Adobe Reader(或 Acrobat)显示找不到单词的消息。所以本质上,我创建了一个可以正确复制但不可搜索的 PDF 文档。知道我在创建文档时可能遗漏了什么吗?

附加信息: 1. 有问题的文件是一个只有两个字符的最小文件。我已经用包括英语在内的许多不同语言对许多此类文件进行了测试。 None 个文件是可搜索的。 2. 奇怪的是,如果我搜索字母 'e',Adobe reader 会突出显示一个不正确的单词,即使文件中不存在字母 'e'。 3. Adob​​e acrobat 也无法在这个文件中搜索,但是当我将文件保存到另一个磁盘文件时,保存的文件现在可以搜索了。我确认字体文件、ToUnicode 对象、CID 对象和字体描述对象等主要对象在保存的文件中是相同的。但是,其中一个字体对象被调到更靠近文件顶部的位置。 4. FoxIt能够正确搜索这些文件。

相关 PDF 对象:

5 0 obj

<>

    q 0.750000 0 0 0.750000 0.000000 792.000000 cm 

    q q q 0.160000 0.000000 0.000000 0.160000 0.000000 0.000000 cm 

    BT /F0 100.000000 Tf 0 g 750.000000 -690 Td[<02B0>] TJ 35.000000 0 Td[<02B9>] TJ ET Q

    Q 

    Q

    Q

结束流

endobj

10 0 对象

<>

endobj

11 0 对象

<> /FontDescriptor 10 0 R/Subtype/CIDFontType2/Type/Font>>

endobj

12 0 对象

<>

endobj

8 0 对象

<>

    /CIDInit /ProcSet findresource begin

    12 dict begin

    begincmap

    /CIDSystemInfo

    << /Registry (Adobe)

    /Ordering (UCS) /Supplement 0 >> def

    /CMapName /Adobe-Identity-UCS def

    /CMapType 2 def

    1 begincodespacerange

    <0000> <FFFF>

    endcodespacerange

    3 beginbfchar

    <0000> <0000>

    <02B0> <05E0>

    <02B9> <05E9>

    endbfchar

    endcmap

    CMapName currentdict /CMap defineresource pop

    end

    end

结束流

endobj

简而言之

问题是由于不同文档使用了相同的 PDF ID

详细

Adobe Reader / Acrobat 似乎缓存了通过 ID 识别文档的文档搜索信息。 OP 的一些文档似乎具有相同的 ID,至少两个示例文件是这样的:

/ID[<754DC77D28E62763C4916970D595A10F><754DC77D28E62763C4916970D595A10F>] 

因此,当 OP 试图搜索他的 test.pdf 时,使用了之前查看过的具有该 ID 的 PDF 的搜索信息。从他的评论之一考虑这个描述:

What happens if you search for the English letter 'e'. For me, the two Hebrew letters can selected. The same happens when I search for one of these English letters: d, i, n, o, p, r, t, y, I, N, R, T and Y.

搜索信息似乎已为带有拉丁字形的文档缓存,此外,考虑到 test_en.pdf(也共享相同 ID 的文档)的评论:

It has one English line: 'This is a test line'. When I search for "This', I find it. But I can not find the other words.

原始文档的文本似乎以 "This" 开头,但以不同的方式继续。