为什么可以复制带有嵌入字体的 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. Adobe 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" 开头,但以不同的方式继续。
我正在编写一个带有嵌入式子集字体的 pdf 文件。根据需要,我包括了 ToUnicode 和 CIDSet 对象。为了进行测试,我创建了一个包含两个希伯来字符的简单 PDF。我可以 select 这两个字符并复制到剪贴板,然后将其正确粘贴到另一个应用程序(例如 Word)中。但是我无法搜索包含这两个字符的单词。 Adobe Reader(或 Acrobat)显示找不到单词的消息。所以本质上,我创建了一个可以正确复制但不可搜索的 PDF 文档。知道我在创建文档时可能遗漏了什么吗?
附加信息: 1. 有问题的文件是一个只有两个字符的最小文件。我已经用包括英语在内的许多不同语言对许多此类文件进行了测试。 None 个文件是可搜索的。 2. 奇怪的是,如果我搜索字母 'e',Adobe reader 会突出显示一个不正确的单词,即使文件中不存在字母 'e'。 3. Adobe 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" 开头,但以不同的方式继续。