常用的pdf产生方案无外乎几种,虚拟打印机,office adobe插件,adobe sdk,itextsharp等pdf组装软件等。

通常一些商业软件的报表转pdf基本不可能用到插件、sdk或者itextsharp,最常用的可能就是虚拟打印机了。虚拟打印机驱动是支持Postscript输出的,adobe和惠普登厂商都有提供下载。可以利用GhostScript把ps文件转成pdf。一般情况下是没有问题的,文字拷贝和搜索都正常(加密或锁定情况除外)。

可是例外情况让我赶上了,不得不花了很多时间研究。最早以为GhostScript的使用出了问题,怎么改问题依旧;后来又下了很多字体包也没有效果。最终想可能是ps文件出了些问题。一般不能拷贝或者搜索的都是“新宋体”的嵌入文字,好,找到这个字库,是以ttc而不是ttf结尾的,说明这个字库中包含了多个字体;再搜索ps文件,字体名称是以ansi进行编码用十六进制字符串表示的,中文是以unicode编码的十六进制字符串,通过中文索引找到文字前的序号,这个序号就是字库中该文字编码对应的序号;多看几个字,发现这些序号都是对的,可是后面跟的十六进制中文不对了(与序号的对应可以根据ttfdump.exe工具产生对应表来找)。

好吧,那就根据这个序号在对应表中找到对应的十六进制编码,替换掉错的;再用GhostScript工具重新转换。

OK,生成的pdf中的中文可以复制和检索了。

总结:可能是ps打印驱动的bug,也有可能是“新宋体”字库的bug让打印驱动发生错误。据说“宋体/新宋体”字库很是臭名昭著。

如果有其他pdf不能复制或者搜索,请大家联系我。

posted on 2009-07-02 16:48  一云  阅读(8942)  评论(0编辑  收藏  举报