我有一个可搜索的XPS文件,我将其转换为PDF:
gxps -sOutputFile=C:\temp\foo.pdf -sDEVICE=pdfwrite \
-dNOPAUSE C:\temp\foo.xps
生成的PDF无法搜索。
gxps
是否有办法生成可搜索的PDF? 修改
gxps version: 9.15
Build date: Mon Sep 22 12:35:05 2014
答案 0 :(得分:1)
我查看了PDF并使用pdffonts
快速调查了GXPS用于生成的PDF文件的字体:
$ pdffonts forSO.pdf
name type encoding emb sub uni object ID
----------------------- ------------ ---------------- --- --- --- ---------
RFGWZI+Arial TrueType WinAnsi yes yes yes 11 0
表面上看,它看起来还不错:
emb
列)。type
列)。encoding
列)。/ToUnicode
地图(请参阅uni
列)。然而,仔细观察,/ToUnicode
嵌入到PDF中的真实gxps
地图似乎非常重要。这是它,从PDF中提取为完整的间接对象,具有未压缩的流:
41 0 obj
<<
/Length 863
>>
stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapType 2 def
/CMapName/R41 def
1 begincodespacerange
<00><ff>
endcodespacerange
42 beginbfrange
<04><04><0004>
<05><05><0004>
<06><06><0006>
<07><07><0006>
<08><08><0006>
<09><09><0006>
<0a><0a><000a>
<0b><0b><000a>
<0c><0c><000c>
<0d><0d><000c>
<0e><11><000e>
<12><12><000c>
<13><13><000c>
<14><14><000c>
<15><15><000c>
<16><16><0004>
<17><17><0004>
<18><18><0004>
<19><1a><0019>
<1b><1b><001a>
<1c><1c><001a>
<1d><1d><001a>
<1e><1e><001a>
<1f><1f><001a>
<20><20><0044>
<21><21><001a>
<22><22><001a>
<23><23><001a>
<24><24><0024>
<25><25><000c>
<26><26><001d>
<27><27><0023>
<28><28><0023>
<29><29><0028>
<41><41><0044>
<44><44><0044>
<49><49><0044>
<63><63><0044>
<69><69><0044>
<74><74><0044>
<76><76><0044>
<79><79><0044>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end end
endstream
endobj
可以看出,/ToUnicode
表包含42个键,但这些键只映射到12个不同的字符值:
这12个不同字符值中的一些在此表中多次出现,因此将多个字形反向映射到同一个字符(即使对于单个字符,这似乎也不正确):
no. of | char
occurrences | value
------------+-----------
1 | <000e>
1 | <0019>
1 | <001d>
1 | <0024>
1 | <0028>
2 | <000a>
2 | <0023>
4 | <0006>
5 | <0004>
7 | <000c>
8 | <001a>
9 | <0044>
例如,字符值06
会映射到包含数字06
,07
,08
和09
的字形。
这看起来并不正确。
恕我直言,这应该得到 Ghostscript's Bugzilla 的错误报告(但我不确定GXPS组件是否仍在积极维护)。
更新: 我在这里找到了Ghostscript / GXPS bugzilla数据库的现有条目: