首页 > 其他分享 >H5移动端加载预览pdf文件——demo

H5移动端加载预览pdf文件——demo

时间:2024-06-20 15:12:52浏览次数:25  
标签:canvas const demo H5 width pdf 移动 viewport

前言:正常情况下需要在HTML中嵌入本地docx或pdf文件时,我们会有以下解决办法:
1. 使用<iframe>标签
2. 使用<embed>标签
3. 使用<object>标签
4. 使用第三方库(如PDF.js)

当实际操作时,会发现前三种方式在pc端支持,但在移动端不支持,因为这些标签在移动端浏览器中的支持并不统一。

为了兼容移动端,我使用了第4种方案解决,当然网上很多教程咯~

随便找了一个ppt,放入html中使用第三方插件后展示的效果如下:

 

完整代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>移动端引入pdf</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .pdf_box,
      #pdf-container {
        width: 100vw;
        height: 100vh;
        overflow: scroll;
      }
      canvas {
        width: 100vw;
      }
    </style>
  </head>
  <body>
    <!-- <iframe src="test.pdf" class="pdf_box"></iframe>
    <embed src="test.pdf" class="pdf_box">

    <object data="test.pdf" class="pdf_box"></object> -->
    <div id="pdf-container"></div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.js"></script>
    <script>
      pdfjsLib.GlobalWorkerOptions.workerSrc =
        "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.js";

      const pdfUrl = "test.pdf",
        _targetDom = "pdf-container";
      pdfjsLib.getDocument("test.pdf").promise.then(async (doc) => {
        let _i = 0;
        for (let item of new Array(doc.numPages).fill()) {
          await renderOtherPage(doc, ++_i, _targetDom);
        }
      });
      function renderOtherPage(pdfDoc, pageNumber) {
        return new Promise((resolve) => {
          pdfDoc.getPage(pageNumber).then((page) => {
            const scale = 1;
            const viewport = page.getViewport({ scale: scale });
            const canvas = document.createElement("canvas");
            const context = canvas.getContext("2d");
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            document.getElementById(_targetDom).appendChild(canvas);
            const renderContext = {
              canvasContext: context,
              viewport: viewport,
            };
            page.render(renderContext);
            resolve();
          });
        });
      }
    </script>
  </body>
</html>

  

 

标签:canvas,const,demo,H5,width,pdf,移动,viewport
From: https://www.cnblogs.com/cat-eol/p/18258695

相关文章

  • 一书即可通关LLM大模型!成功通关大模型,看这1本足够了... (附PDF)
    哈喽大家好!最近有粉丝朋友喊我推荐一些大模型的学习书籍,我给大家推荐这么一本书,基于gbt3、gbt4等transform架构的自然语言处理。这是一本对transform工作原理感兴趣的人必读的书籍。亚马逊的评分是九点七分,内行人在睡不着的时候恨不得把全书都背诵完毕。本书的写作目的是......
  • DEMO_01:List数据存储,回调函数,集合转字符串,元素去重
    *题目:*1.构建属性结构List<DemoNode>data,根据本包的data.png中数据结构图将数据存入data中(字就是nodeName)*2.将树形结构List<DemoNode>里面的元素全部遍历出来存放到List<String>list中,输出结果转换成字符串:粉粉碎机被粉碎机粉碎了怎么办*3.将list里元素去重后......
  • 人大这波666! 国内首本中文版的LLM大语言模型入门指南!(PDF免费送)
    我就知道人大还留有后手。自从这篇中文大模型综述发布以后,在全网收到了一致好评。人大这边也一直没闲着,在后续一年之内修改了十多遍,收录了近千篇的参考文献,快马加鞭赶出了这本大语言模型中文版。一经发布就震惊国内高校和研究人员,是更适合中国体制的大模型指南。本书内容......
  • python金融实战教程pdf 目录
    python金融实战教程pdf目录:http://literalink.top/resource/detail/7186336410574524416第1章Python简介及安装11.1Python简介 11.2如何安装Python 31.3Python的不同版本 31.4运行Python的3种方式 41.4.1用GUI启动Python 41.4.2从Python命令行......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线打开 pdf 文件
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)芯片架构。查看本示例演示效果本示例关键代码的编写位置Vue+Springboot注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名......
  • 人大这波操作666! 国内首本中文版的LLM大语言模型入门指南!(附PDF)
    我就知道人大还留有后手。自从这篇中文大模型综述发布以后,在全网收到了一致好评。人大这边也一直没闲着,在后续一年之内修改了十多遍,收录了近千篇的参考文献,快马加鞭赶出了这本大语言模型中文版。一经发布就震惊国内高校和研究人员,是更适合中国体制的大模型指南。本书内容......
  • pdfFactory虚拟打印机软件下载-pdfFactory虚拟打印机官方最新版下载附加详细安装步骤
    pdffactory是一款办公软件,帮助用户更好的进行文件处理,轻松查询使用,不用担心故障的问题,而且打印速度快,效率高,保障用户日常打印轻松。安装包获取地址:FinePrint-安装包:​​https://souurl.cn/DOnayE​​pdfFactory专业版:​​https://souurl.cn/OnKnu9​​pdfFactor......
  • Java与React轻松导出Excel/PDF数据
    前言在B/S架构中,服务端导出是一种高效的方式。它将导出的逻辑放在服务端,前端仅需发起请求即可。通过在服务端完成导出后,前端再下载文件完成整个导出过程。服务端导出具有许多优点,如数据安全、适用于大规模数据场景以及不受前端性能影响等。本文将使用前端框架React和服务端框架S......
  • 最新区块链论文速读--CCF C会议 ICPADS 2023 共28篇 附pdf下载 (3/4)
    Conference:InternationalConferenceonParallelandDistributedSystems(ICPADS)CCFlevel:CCFCCategories:ComputerArchitecture/ParallelandDistributedComputing/StorageSystemsYear:2023Num:28第1~7篇区块链文章请点击此处查看第8~14篇区块链文章请点击......
  • 实现一个实时数据平台的小型demo
    近期自己梳理了一下自己所属业务线上的数据中台技术栈,以常见的实时链路为例,从最初的埋点到数据服务层查询到结果,依次经过:1、埋点上报2、写入消息队列3、flink读取队列4、flink写入clickhouse或hbase5、spring项目提供查询和接口返回搭建个简易版的实时数据平台流程跑......