问题描述
pdf的印章、表格框都在,但文字不显示。选中文件空白处,点击复制,复制到word里发现是有字的,只是在pdf上字体不显示罢了。如下可供参考:
【正常pdf】
【问题pdf】
排查过程
- 字体问题:排查是否系统里没有pdf的字体(经排查发现有该字体);
- 怀疑签名问题:原pdf有签名,打开文件时显示签名错误。(后来发现跟签名无关);
- 怀疑文件传输过程中字体属性丢失,如颜色等信息。(确实是这个问题)
解决办法
代码使用的是FTP 从三方服务器拿的文件,FTP默认下载方式是通过文件流(字符流),但pdf文件本身不同于txt等,pdf是二进制文件,若按照字符流读取,当文件最后部分不足8位时,可能会丢失数据。此种情况我怀疑丢失的就是文字信息这部分数据,导致文字不显示。
最终解决办法:FTP连接建立后,将下载模式改为二进制流读取(bin),问题解决!
FtpClient ftpClient = new FtpClient();
ftpClient.seTFileType(FTP.BINARY_FILE_TYPE);