需求:将从服务器请求回来的 pdf 文件展示为图片
填坑填坑,github 上的项目中的例子很重要,不要怕英文
https://github.com/mozilla/pdf.js
如果是直接展示 pdf 文件,window.open(url)就好了
也可以使用 pdf.js 中的 viewer.js
这次的需求是将 pdf 渲染为类似 image
例子可以参考 github 下 examples/learning/helloworld.html
请求 pdf 文件,使用 canvas 渲染到网页
在 React 项目中使用
在项目 public/index.html 引入 pdf.js\
- 引入网络资源
window 对象中增加 pdfjsLib 方法 下载到本地引入,放到 server/build 中
_使用_
js1
2
3
4
5
6
7
8
9
10
11
12
13
14
15pdfjsLib.getDocument(url).then(pdf=>{
pdf.getPage(1).then(page=>{
var scale = 1.5;
var viewport = page.getViewport({ scale: scale, });
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
})
var renderContext = {
canvasContext: context,
viewport: viewport,
};
page.render(renderContext);
})html
1
<canvas id="the-canvas" style="border:1px solid black"></canvas>
问题
url 是 pdf 文件的路径,使用本地的 pdf 文件,采用 es6 的方法引入,可以正常调用
但是变成服务器的地址时,产生跨域问题。
解决办法
参考 github 下 examples/learning/helloworld64.html
需要后台改接口,将返回的文件路径变为二进制文件流,然后使用 window 自带的解码方法 atob 解码,将解码后的数据传给 pdf.js 的方法,
1 | //模拟请求回来的数据,使用 axios/fetch 请求代替 |
另外还做了一个拖动和放大 缩小的功能,具体参考
1 |
|
1 |