PDF文档复制粘贴乱码,如何解决

PDF文档复制粘贴乱码,如何解决 一直以来经常会有人问我为什么PDF文档中的内容能看到也能复制但是粘贴就会乱码。例如一个红楼梦的样本文件无法通过复制粘贴得到正文文本。那么是什么原因造成的乱码呢我用AI分析这个文档看一下字符是如何被渲染到页面上面的。首先我们用oPDF看一下文档的内容流你会看到类似的操作符这段指令的意思是使用C0_0字体渲染0003字符到指定位置。AI分析结果如下通过分析我们知道了0003字符是从字体文件 /FontFile3 中读取字形并渲染的。所以我们可以正确的看到这个字。那么为什么复制粘贴就乱码了呢这就要提到一个字体中的概念----Unicode映射。字体文件的本质就是矢量绘图而复制粘贴需要知道文字的Unicode码把这个码放到剪贴板里面其它的软件才会知道是什么字。正规的字体文件都会带一个Unicode映射表这个表会告诉软件字体中的第几个字对应的是Unicode中的哪一个字的编码。然后我们才能正确地复制粘贴。所以PDF文档为什么复制粘贴之后就会乱码的原因想必你也清楚了。正是由于某些PDF文档在制作的时候有意将Unicode映射表删掉了造成我们无法得知复制的字对应的是Unicode的哪一个字所以无法复制粘贴文档中的文本。这是一个很简单也很有效的文档反拷贝手段。为了解决这个问题我写了一个软件PDFontFixer采用OCR识别PDF文档中的字体里面的每一个字形得到对应的Unicode编码再将这些编码做成ToUnicode映射表保存到PDF文档的字体里。这样我们就可以正常复制粘贴文本了。