我正在编写带有嵌入式子集字体的pdf文件。根据需要,我包括ToUnicode和CIDSet对象。为了测试,我创建了一个带有两个希伯来字符的简单PDF。我可以选择两个字符并复制到剪贴板,然后将其正确粘贴到另一个应用程序(如Word)中。但是我无法搜索包含这两个字符的单词。 Adobe Reader(或Acrobat)显示未找到该单词的消息。所以从本质上讲,我创建了一个可以正确复制但无法搜索的PDF文档。知道创建文档时我可能会遗漏什么吗?
其他信息: 1.有问题的文件是一个只有两个字符的最小文件。我已经用许多不同的语言测试了很多这样的文件,包括英语。这些文件都不可搜索。 2.奇怪的是,如果我搜索字母“e”,Adobe读者会突出显示一个错误的单词,即使文件中不存在字母“e”。 3. Adobe acrobat也无法在此文件中搜索,但是当我将文件保存到另一个磁盘文件时,现在可以搜索保存的文件。我确认了保存文件中的主要对象,如font-file,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
endstream
endobj
10 0 obj
&LT;&GT;
endobj
11 0 obj
&LT;&GT; / FontDescriptor 10 0 R / Subtype / CIDFontType2 / Type / Font&gt;&gt;
endobj
12 0 obj
&LT;&GT;
endobj
8 0 obj
&LT;&GT;
流
/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
endstream
endobj
答案 0 :(得分:2)
问题是由于用于不同文档的PDF ID 相同。
Adobe Reader / Acrobat似乎通过 ID 缓存标识文档的文档的搜索信息。一些OP的文档似乎具有相同的 ID ,至少两个示例文件有:
/ID[<754DC77D28E62763C4916970D595A10F><754DC77D28E62763C4916970D595A10F>]
因此,当OP试图搜索他的test.pdf时,使用来自先前查看的具有该ID的PDF的搜索信息。从他的一条评论中考虑这个描述:
如果您搜索英文字母&#39;会发生什么?对我来说,可以选择两个希伯来字母。当我搜索其中一个英文字母时会发生同样的情况:d,i,n,o,p,r,t,y,I,N,R,T和Y.
搜索信息似乎已经缓存为包含拉丁字形的文档。此外,考虑到test_en.pdf上的这条评论(共享相同ID的文档):
它有一个英文行:&#39;这是一个测试行&#39;。当我搜索&#34;这个&#39;时,我找到了它。但我找不到其他的话。
原始文档的文本似乎已经开始于&#34;这个&#34;但继续不同。