最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 移动端网页PDF预览

    正文概述 掘金(YngMe正在掘金)   2021-01-04   551

    接到一个移动端网页pdf预览的需求,首先想到的方案是利用iframe进行显示。 后端响应头设置

    Content-Disposition: inline
    

    Content-Disposition

    一般有以下几种情况

    // inline 默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示
    Content-Disposition: inline   
    // attachment 意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框
    Content-Disposition: attachment
    // filename 下载后的文件名
    Content-Disposition: attachment; filename="filename.jpg"
    

    按照正常思维,设置之后,应该在iframe里面展示pdf内容。 在PC端模拟器测试时,一切与预期一致。但是到了移动端浏览器,就不同了。

    iphone手机 自带的safari、微信、企业微信自带的浏览器都与预期一致。 Android手机(huawei mate9),在企业微信自带浏览器,是新窗口打开了pdf,在微信自带浏览器和手机自带浏览器,都是提示下载

    效果与需求不一致

    pdf.js

    简介

    pdfjs 在npm仓库提供了一个叫pdfjs-dist包。

    引入pfdjs

    const PDFJS = require("@/pdfjs-dist");
    const workerSrc = require("@/pdfjs-dist/es5/build/pdf.worker.entry.js");
    PDFJS.GlobalWorkerOptions.workerSrc = workerSrc;
    

    下载pdf

    const CMAP_URL = "https://unpkg.com/pdfjs-dist@2.5.207/cmaps/";
    const loadingTask: any = PDFJS.getDocument({
        url: this.pdfUrl,
        cMapUrl: CMAP_URL,
        cMapPacked: true,
        withCredentials: true,
    });
    loadingTask.promise
        .then((pdfDoc_) => {
            // 拿到pdf可以存起来,用于接下来的展示
        })
        .catch((error: any) => {
    
        });
    

    获取某一页的内容

    this.pdfDoc
        .getPage(num)
        .then(
          (page: any) => {
            const viewport = page.getViewport({ scale: 1 });
    
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            canvas.style.width = "100%";
            
            const renderContext = {
              canvasContext,
              viewport: viewport,
            };
            page.render(renderContext);
          }
        )
        .catch((e: any) => {
          console.info(e);
        });
    

    问题

    • pdf展示模糊

      在高分辨率屏幕上,pdf可能会显示的不太清晰。 这是canvas 属性上设置的width/height是指物理像素,如果devicePixelRatio的值为2,那么意味着一个css像素相当于2个物理像素。按照上面的设置,canvas的css宽度值与canvas的物理像素值一致,将会导致canvas画布被放大,展示变得模糊。 于是,根据屏幕的像素比,设置scale的值,使得在不同分辨率的设备,都能得到清晰的体验效果。

    • pdf部分字体不显示

    引入字体库 const CMAP_URL = "https://unpkg.com/pdfjs-dist@2.5.207/cmaps/"; // 字体库地址 const loadingTask: any = PDFJS.getDocument({ url: this.pdfUrl, cMapUrl: CMAP_URL, cMapPacked: true, withCredentials: true, });

    • 签章不显示

    手动修改源码 因为库的作者处于安全考虑,如果是Sig类型,会隐藏,所以,也没法指望作者放开了。只能自己手动。 pdf.worker.js 移动端网页PDF预览

    pdf下载

    不同浏览器,依然表现不太一致

    在微信里

    先展示一个诱导下载QQ浏览器的页面,需要选择【其他方式下载】,多了一步,还好,能实现下载 移动端网页PDF预览

    在企业微信里

    下载后直接预览

    在自带的浏览器里

    移动端网页PDF预览


    起源地下载网 » 移动端网页PDF预览

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元