|
楼主 |
发表于 2024-10-8 22:11:08
|
显示全部楼层
还有一个既能替换字体,又不会造成显示错位的办法:用原字体进行替换,如FZSSK就是方正书宋简体。
这个PDF中的字体比较占空间,原因是:这个PDF是由多个PDF合并成的,原先每个用于合并的PDF都使用了内嵌字体,但在做字体内嵌的时候,为了减小最终PDF文件的长度,一般不会把整个字体文件嵌进去,而是只嵌入用到的字,没用到的就不嵌入,所以内嵌字体是原始字体的一个子集(sub-set)。而内嵌字体名也就变成了所谓的“子集字体名”,即随机字符串+原字体名,如FZSSK在不同的PDF内嵌后,就成了BJWFJH+FZSSK、XLIXCH+FZSSK,等等。而在对PDF进行合并的时候,一般会对相同的字体进行合并以减小合并后的PDF文件长度。但这个PDF所用的合并软件可能检查的是子集字体名,而不是原始字体名,所以识别不出相同的原始字体,或者干脆就是偷懒没有对字体进行检查、合并,造成同一个字,可能在不同的子集中都有存在,即存在大量的重复字体信息。要验证这种重复性,可以在Acrobat里打开这个PDF,然后在属性中看字体,可以看到大量的FZSSK。
Acrobat另存为的时候,能够从子集字体名中知道原来的字体是什么,然后就试图对相同的字体(即原始字体相同的子集字体)进行合并,即消除重复性,当然文件长度就降下来了。但是Acrobat在判断不同子集中的字符是否是同一个字符时,显然出了点问题,所以会导致合并后的子集字体可能不全,显示的时候就会报错和丢字。
PDF补丁丁使用的是iTextSharp的技术,别的不好说,至少在替换字体的时候没有Acrobat的问题,既能消除字体重复性,又不会造成文字显示不全,所以能够达到目的。
使用PDF补丁丁,用对应的原版方正字体对FZLSK(隶书)、FZZYK(综艺)、FZSSK(书宋)、FZKTK(楷体)、FZFSK(仿宋)、FZHTK(黑体)、FZXBSK(小标宋)进行替换后,PDF文件长度从93.7MB降到64.0MB,差不多去掉了三分之一。
|
|