从乱码的pdf文件来看,问题都出在type0字体上了。深入了解一下的话,你会发现Encoding为Identity-H或者Identity-V的具有特殊含义,怎么个特殊法呢,就是可以直接用,下图是我在pdf reference 1.7中截取的一段话:
这段话我理解了一下,他应该是想说,Identity-H这种,他的cid,应该就对应gid。可以直接用的意思就是把cid当作gid使用。下图是Identity-H的cid-gid的CMap,是我从福昕的程序路径中发现的,当然,git上也有:
前面两个尖括号应该是cid起止范围,后面是gid的开始id,完全是一一对应。
所以在代码GrCIDFont初始化的时候,我给其加了个判断,
这样我们在后面的HTMLRenderer.dll中的Writer.h的WriterText函数中就可以判断用哪个了,如下
以上,我们就可以让大多数中文乱码的pdf正常展示了。我只是综合了几个常见的pdf乱码的错误来写的,pdf规范读的很粗略。如果各位高手有更好的解决方案,望不吝赐教。
ps:中间代码写的很奇怪,就不贴了。