回答网友提问  2015-7-28

因为好多人问能不能显示中文的问题,我总结大致分为两类问题:

1.能否显示中文?2.能否读取远程服务器上的PDF(包括中文文件名)

第一个问题:能否显示中文?

首先,显示中文肯定是可以的,不论是文件名还是文件的正文,见下图:

Android pdf加载网络和本地_跨域访问

如果你说显示不出中文,我想是不是下面这种情况:

Android pdf加载网络和本地_跨域访问_02

这属于js中文乱码问题,你看中文文件名完全没有识别出来,看一下你的viewer.html文件在<head>标记是不是有这句:<meta charset="utf-8">

换成:<meta http-equiv="Content-Type" content="text/html" charset="gb2312" >  就可以啦!说白了就是charset换成gb2312

第一个问题over。

第二个问题:能否读取远程服务器上的PDF(包括中文文件名)



我们哆嗦一点,从头说起,首先用mozilla的example证明读取远程服务器上的pdf绝对没有问题,见下图



读取http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf




Android pdf加载网络和本地_显示中文_03


 


然后我换成公司服务器上的pdf文件地址,运行,如下图所示,我想大多数人遇到的都是这个问题。


 


Android pdf加载网络和本地_跨域访问_04


 


这个问题简单说就是跨域访问,其实mozilla的example里有一段声明提到了这个问题,只是这个声明不那么显眼,在helloworld.html中,见下图


Android pdf加载网络和本地_跨域访问_05


 


(CORS) - most servers don't support cross-origin browser requests.  


CORS就是跨域访问,大多数服务器都不支持跨域访问。


要解决跨域访问问题,有很多解决方案,由于能力有限,那些好复杂的处理办法我还完全不懂,不过我百度的水平还是一流的,下面这个链接就是处理这个问题的简单方法,无奈中文资料太少。http://www.webdavsystem.com/ajax/programming/cross_origin_requests


如果看不懂英文,我翻译过来就是一张图


Android pdf加载网络和本地_显示中文_06


 


设置完毕后再运行:成功,跨域访问问题顺利解决,见下图。第二个问题OVER。


Android pdf加载网络和本地_跨域访问_07


 


关于7.28第二个问题的延伸,同事帮助解决了一个小细节 2015-11-17


<metahttp-equiv="X-UA-Compatible"content="IE=edge"charset="utf-8"/>