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

时间:2015-02-21 21:01:46

标签: pdf searchable

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

其他信息: 1.有问题的文件是一个只有两个字符的最小文件。我已经用许多不同的语言测试了很多这样的文件,包括英语。这些文件都不可搜索。 2.奇怪的是,如果我搜索字母“e”,Adobe读者会突出显示一个错误的单词,即使文件中不存在字母“e”。 3. Adob​​e 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

1 个答案:

答案 0 :(得分:2)

简而言之

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

详细

Adob​​e 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;但继续不同。