这篇文章主要讲解:加载pdf文档流和加载pdfurl二选的不同,重点讲解加载pdf文档流的注意方法

pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

  • 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决。

  • svg模式渲染存在缺陷,只能渲染普通pdf,带签名、印章的可能会渲染不全,报错,pdf.js官方目前没有给出解决方案

  • canvas模式本质是图片,默认进去的时候,图片在手机端被缩放,不是原分辨率,所以失真模糊。所以需要放大查看pdf

==================================================================================================

pdf使用文档可以参考:https://github.com/EncodingAESKey/pdfh5/blob/master/README.md

一、npm安装方式(适应于vue), react使用方法类似vue(example/react-test是react使用示例)

案例版本:"pdfh5": "^1.3.20"

npm install pdfh5

注意:按下面的方式引用css使用

import Pdfh5 from "pdfh5";
import "pdfh5/css/pdfh5.css";

二、使用:加载pdf文档流,加载pdf链接

渲染pdf方法:

<!--存放pdf的标签-->
<div id="pdfWrap"></div>


/** 初始化渲染(vue) */
mounted() {
    this.loadPdfBlob();
},
methods: {
    loadPdfBlob() {
      fetch("请求地址", {
        method: 'get',
        headers: {}, //自定义headers头数据
      }).then((response) => {
        // 转换为blob数据
        response.blob().then(b => {
          const url = window.URL.createObjectURL(b); 
          this.loadPdf(url); 
        })
      }).then((json) => {
        console.log(json);
      }).catch((error) => {
        console.error(error);
      });
    },
    // 加载pdf文档
    loadPdf (datas) {
      //实例化
      this.pdfh5 = new Pdfh5("#pdfWrap", {
        // pdfurl: "/static/pdf-dist.pdf",
        pdfurl: datas,
        // data: datas,  //流数据
        URIenable: true, //true开启地址栏file参数
        renderType: 'svg', //pdf渲染模式 svg canvas
        lazy: false, //是否开启懒加载
        maxZoom: 3, //手势缩放最大倍数 默认3
        scrollEnable: true, //是否允许pdf滚动
        zoomEnable: true, //是否允许pdf手势缩放
      });
      //监听完成事件
      this.pdfh5.on("complete", (status, msg, time) => {
        console.log("状态:", status, ", 信息:", msg, ", 耗时:", time, "毫秒,总页数:", this.totalNum);
      });
      // pdf 监听加载失败,msg信息,time耗时
      this.pdfh5.on("error", (msg, time) => {
        console.log("pdf加载失败", "信息:", msg, ", 耗时:", time, "毫秒");
      })
    },
},

获取到的数据格式如下:

讲解上面的操作:

第一:页面上需要一个渲染pdf的

第二:引入pdfh5和pdfh5.css (import Pdfh5 from "pdfh5"; import "pdfh5/css/pdfh5.css";)

第三:使用项目中的请求方法进行获取pdf流文件,如果渲染出的是空白的,可能和你项目中请求拦截器有关,可以换一种请求方法,比如上面写的fetch请求,需要自己带上头信息

第四:获取到数据之后,使用blob转换,如下

response.blob().then(b => {
         const url = window.URL.createObjectURL(b); 
 })

最终的url就是blob格式的url,比如 blob:http://localhost:8080/a3e6669e-1384-34a1-8a96-defcc0de6bc0

然后通过pdfh5进行预览即可

如果要渲染本地某一个pdf文件,只需要将pdfurl设置成本地pdf文件地址即可,pdfurl: "/static/pdf-dist.pdf"

 

 

交流

1、QQ群:可添加qq群共同进阶学习: 进军全栈工程师疑难解  群号:   856402057

2、公众号:公众号「进军全栈攻城狮」 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

                                                  

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐