H5页面在线预览pdf

ops/2024/10/31 17:23:13/

pdf_0">H5页面预览pdf

一般的做法是在浏览器中打开pdf文件,但是这种方式会导致浏览器的工具栏和地址栏也一起显示出来,影响用户体验。因此,我们需要在H5页面中实现一个预览pdf的功能,例如在网页或微信小程序中嵌入 PDF 文档,方便用户直接预览文件

pdfworkerjs_2">一. 使用PDF.js 和 pdf.worker.js

pdf.jspdf.worker.js:PDF.js 的核心文件和 Worker 脚本文件。
有需要的可以从gitcode中获取

  1. HTML 和样式设计
    在 HTML 中,创建一个全屏的容器 pdf-container 用于展示 PDF 页面,CSS 通过 100vw 和 100vh 让容器适配整个屏幕。样式代码如下:

HTML 和样式设计

在 HTML 中,创建一个全屏的容器 pdf-container 用于展示 PDF 页面,并通过 CSS 设置其宽高为 100vw 和 100vh,确保容器充满屏幕。样式代码如下:

<!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><div id="pdf-container"></div>
</body>
</html>

操作js部分

<script src="./js/pdf.js"></script>
<script>javascript">pdfjsLib.GlobalWorkerOptions.workerSrc = "./js/pdf.worker.js";const pdfUrl = "13409.pdf";const targetDom = "pdf-container";pdfjsLib.getDocument(pdfUrl).promise.then(async (doc) => {for (let pageNum = 1; pageNum <= doc.numPages; pageNum++) {await renderPage(doc, pageNum, targetDom);}});function renderPage(pdfDoc, pageNumber, containerId) {return new Promise((resolve) => {pdfDoc.getPage(pageNumber).then((page) => {const scale = 1;const viewport = page.getViewport({ scale });const canvas = document.createElement("canvas");const context = canvas.getContext("2d");canvas.width = viewport.width;canvas.height = viewport.height;document.getElementById(containerId).appendChild(canvas);const renderContext = {canvasContext: context,viewport: viewport,};page.render(renderContext).promise.then(resolve);});});}
</script>
  1. 设置 Worker 路径:pdfjsLib.GlobalWorkerOptions.workerSrc 用于指定 pdf.worker.js的路径,提升加载效率。
  2. 加载 PDF 文件:pdfjsLib.getDocument(pdfUrl).promise 以异步方式加载 PDF 文件,返回 PDF 文档对象 doc。
  3. 遍历渲染每一页:通过 for 循环遍历文档的每一页,调用 renderPage 函数将页面内容渲染到 canvas 上,并插入到 pdf-container 中。
  4. 页面缩放和适配:page.getViewport({ scale }) 设置页面的缩放比例,从而控制页面的显示尺寸。
    其实就是把pdf通过canvas转换成图片生成出来,然后通过css设置成全屏,这样就可以实现pdf的预览了

存在的问题:图片显示模糊

由于 PDF.js 默认使用 1 倍的缩放比例,导致生成的图片在移动端显示模糊。为了解决这个问题,我们可以通过设置 scale 参数来调整缩放比例,使其适应移动端屏幕的分辨率。

javascript">const scale = window.devicePixelRatio; // 获取设备的像素比

scale 参数设置为 window.devicePixelRatio,即可根据设备的像素比来调整缩放比例,从而提高图片的清晰度。


http://www.ppmy.cn/ops/129916.html

相关文章

如何使用DBeaver连接flink

通过DBeaver配置并连接flink&#xff1a; 1. 打开Dbeaver&#xff0c;选择“数据库”--》“数据库驱动管理器” 2.在驱动管理器界面点击新建按钮 3.在新建弹窗输入flink相关的驱动信息&#xff0c;主要包括&#xff1a; org.apache.flink.table.jdbc.FlinkDriver jdbc:flink…

国内对接使用GPT解决方案——API中转

在这个数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业不可或缺的一部分。然而&#xff0c;对于国内用户来说&#xff0c;直接对接和使用GPT等大型AI模型却面临着诸多挑战。今天&#xff0c;我们将一起探讨这些挑战&#xff0c;并介绍一种解决方案—…

MFC七段码显示实例

在MFC中添加iSenvenSegmentAnalogX控件&#xff0c;添加编辑框和按钮实现在编辑框中输入数字点击按钮后数字用七段码显示 1、在对话框中点击右键如下图添加控件和变量 2、在sevenDlg.h中添加代码 public: void ShowInd(int,double);3、在sevenDlg.cpp中添加代码 void CSe…

vue 自定义el-message样式,手动关闭

vue 自定义el-message样式,手动关闭 显示 this.messageTips this.$message({message: 不会消失的自定义样式消息,type: warning,duration: 0,offset: 120,customClass: custom-message,});手动关闭 this.messageTips && this.messageTips.close();自定义样式 <st…

宠物空气净化器是否有用?五大高性价比宠物空气净化器种草推荐

宠物空气净化器是否有用&#xff1f;越来越多的人开始养猫咪、狗狗以及其他毛茸茸的宠物。这些毛毛茸茸的小生物围绕在身边&#xff0c;心都化了&#xff0c;一天工作的压力也随之消散。然而&#xff0c;宠物脱毛和产生的异味也是宠物主人经常面临的难题。 在这样的需求下&…

Endnote如何关联Word,在Word上通过Endnote插入文献

1、Word版本已被激活 首先检查Word版本是否已经被激活&#xff0c;不管是正版还是破解版&#xff0c;未激活状态&#xff08;试用&#xff09;可能会导致关联不成功。如下图所示为已激活版本&#xff0c;在“文件”—“账户”可看。 2、勾选开发工具 其次&#xff0c;打开Wor…

nmcli、ip、ifcfg配置网络区分方法

文章目录 一、检查NetworkManager状态使用nmcli命令&#xff1a;检查NetworkManager服务状态&#xff1a; 二、检查ip命令的使用三、检查ifcfg文件查看/etc/sysconfig/network-scripts/目录&#xff1a;查看/etc/network/interfaces文件&#xff08;针对Debian系&#xff09;&a…

密码md5加密处理

hutool工具包 入门和安装 (hutool.cn) <!-- hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency> Overridepublic String login(L…