使用前端插件pdf.js 在h5页面在线浏览pdf文件,与之前使用不一样得地方是,pdf文件存放在其他服务器,还按照原来使用得方法果不其然得报错,跨域了,网上目前找的办法中,说的最多得,是把判断跨域得js代码给注释了,就是这段
if (origin !== viewerOrigin && protocol !== 'blob:') {
throw new Error('file origin does not match viewer\'s');
}
然而,没屌用,不知道是我版本得问题还是啥;
后端php代码:
public function read_file()
{
$pdfurl = file_get_contents('域名/文件名.pdf'); //pdf文件地址
$fileUrl = base64_encode($pdfurl);//转base64
$data = [
'wt_fileurl' => $fileUrl,
];
echo json_encode($data, true);exit;
}
开始没有转base64 但是前端ajax说啥就是接不着,一直进这里
error: function(error) {
console.log(error);
},
但是打印出来 状态还都是200 挺费解得,给转成base64之后,一切都正常了
接下来是前端部分
<iframe id="pdf" width="100%" height="800" src=""></iframe>
// 以流得方式打pdf文件,跨域访问pdf时使用
$.ajax({
type: "POST",
url: "/filemanager/filemanager/pdfindex",
dataType: 'json',
async:false,//同步请求
success: function(e) {
// console.log(e.data.fileUrl);
sessionStorage.setItem('_imgUrl',e.data.fileUrl)
var url = '/static/pdfjs/web/viewer.html'; //这个路径是pdf.js下载以后 viewer.html所在路径
$('#pdf').attr("src",url);
},
error: function(error) {
console.log(error);
},
complete: function(response) {}
});
viewer.html文件修改
<script>
var DEFAULT_URL = "";
var pdfUrl = document.location.search.substring(1);
if(null == pdfUrl || "" == pdfUrl){
var BASE64_MARKER = ';base64,';//声明文件流编码格式
var preFileId = "";
var pdfAsDataUri = sessionStorage.getItem("_imgUrl");//这里就是pdf文件的base64码,我是通过session传递base64的
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
DEFAULT_URL = pdfAsArray;
//编码转换
function convertDataURIToBinary(dataURI) {
var raw = window.atob(dataURI);//这个方法在ie内核下无法正常解析。
var rawLength = raw.length;
//转换成pdf.js能直接解析的Uint8Array类型
var array = new Uint8Array(new ArrayBuffer(rawLength));
for (i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i) & 0xff;
}
return array;
}
}
</script>
这段js需要放在viewer.js引用之前,就是下面这个玩意前面
<script src="viewer.js"></script>
然后在修改 viewer.js 文件
4663行左右
compressed.tracemonkey-pldi-09.pdf 改成 DEFAULT_URL,如下:
var defaultOptions = {
cursorToolOnLoad: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
defaultUrl: {
value: DEFAULT_URL,//"compressed.tracemonkey-pldi-09.pdf",
kind: OptionKind.VIEWER
},
defaultZoomValue: {
value: "",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
修改 viewer.js.map 文件
defaultUrl: {\n /** @type {string} */\n value: \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n },
defaultUrl: {\n /** @type {string} */\n value: \"DEFAULT_URL\",\n kind: OptionKind.VIEWER,\n },
同样compressed.tracemonkey-pldi-09.pdf 改成 DEFAULT_URL
直接编辑器搜索 compressed.tracemonkey-pldi-09.pdf 就找到了
到此 结束 成功 pdf.js下载到官网直接下载就好了,没啥说得了
https://www.jianshu.com/p/8fb76e21b05e 感谢这篇文章得作者,弄了好久,终于在这里拨开云雾见月明了。