vue里怎么使用pdf.js实现pdf文件的预览功能

122 篇文章 17 订阅
订阅专栏

说明

其实实现这个预览代码量很少,核心代码就一行,接下来我介绍一下这个实现过程

准备工作

你首先得准备一个 pdf 插件包,比如:我这边的项目包里的 public 文件夹的 lib 文件夹下面就有一个 pdf 的插件包,里面包含 build 以及 web 两个文件夹。这里我选择是 pdfjs-2.14.305-legacy 版本

在这里插入图片描述

自己去 http://mozilla.github.io/pdf.js/getting_started/#download 下载一个稳定版本的就行,目录大致如下

├── build/
│   ├── pdf.js                             - display layer
│   ├── pdf.js.map                         - display layer's source map
│   ├── pdf.worker.js                      - core layer
│   └── pdf.worker.js.map                  - core layer's source map
├── web/
│   ├── cmaps/                             - character maps (required by core)
│   ├── compressed.tracemonkey-pldi-09.pdf - PDF file for testing purposes
│   ├── debugger.js                        - helpful debugging features
│   ├── images/                            - images for the viewer and annotation icons
│   ├── locale/                            - translation files
│   ├── viewer.css                         - viewer style sheet
│   ├── viewer.html                        - viewer layout
│   ├── viewer.js                          - viewer layer
│   └── viewer.js.map                      - viewer layer's source map
└── LICENSE

核心代码实现

1、启动vue项目的服务,打开浏览器访问 viewer.html 文件

在这里插入图片描述

http://localhost:8081/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/viewer.html

在这里插入图片描述

页面预览的 pdf 文件正是 compressed.tracemonkey-pldi-09.pdf

在这里插入图片描述

我们打开 viewer.js,有个默认的配置项

在这里插入图片描述

通过这个 defaultUrl 参数,我们可以快速找到 2851 行,从而确定链接的参数 file 参数就是我们需要的 pdf 文件路径参数

在这里插入图片描述

2、访问自己包的写法

比如:我这边的写法就是下面的样子,这个就是预览的核心代码

<template>
    <div class="home">
        <iframe
            width="100%"
            height="700px"
            frameborder="0"
            :src="`/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/viewer.html?file=${encodeURIComponent(previewUrl)}`">
        </iframe>
    </div>
</template>

<script>
export default {
    name: 'home',
    data() {
        return {
            previewUrl: "/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/compressed.tracemonkey-pldi-09.pdf"
        }
    }
}
</script>

在这里插入图片描述

3、访问接口包的写法

比如:访问接口包这个 pdf 下载链接 http://127.0.0.1:6666/kaimoApi/download?path=2b3a9f44cfc640ec93fdd81d40f0989e,直接访问浏览器就会下载该 pdf。

在这里插入图片描述

我们应该怎么预览?

如果写成下面这个:

<template>
    <div class="home">
        <iframe
            width="100%"
            height="700px"
            frameborder="0"
            :src="`/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/viewer.html?file=${encodeURIComponent(previewUrl)}`">
        </iframe>
    </div>
</template>

<script>
export default {
    name: 'home',
    data() {
        return {
            // previewUrl: "/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/compressed.tracemonkey-pldi-09.pdf",
            previewUrl: "http://127.0.0.1:6666/kaimoApi/download?path=2b3a9f44cfc640ec93fdd81d40f0989e",
        }
    }
}
</script>

就会报错 file origin does not match viewer's,我在 viewer.js 的源码处打印了日志 console.log("kaimo313---->", fileOrigin, viewerOrigin)

validateFileURL = function validateFileURL(file) {
if (!file) {
    return;
  }

  try {
    var viewerOrigin = new URL(window.location.href).origin || "null";

    if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {
      return;
    }

    var fileOrigin = new URL(file, window.location.href).origin;
    console.log("kaimo313---->", fileOrigin, viewerOrigin)
    if (fileOrigin !== viewerOrigin) {
      throw new Error("file origin does not match viewer's");
    }
  } catch (ex) {
    PDFViewerApplication.l10n.get("loading_error").then(function (msg) {
      PDFViewerApplication._documentError(msg, {
        message: ex === null || ex === void 0 ? void 0 : ex.message
      });
    });
    throw ex;
  }
};

说明 fileOrigin 跟 viewerOrigin 必须要相同,所以 previewUrl 就不能配置 origin。

在这里插入图片描述

我们可以修改成下面这样:

<template>
    <div class="home">
        <iframe
            width="100%"
            height="700px"
            frameborder="0"
            :src="`/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/viewer.html?file=${encodeURIComponent(previewUrl)}`">
        </iframe>
    </div>
</template>

<script>
export default {
    name: 'home',
    data() {
        return {
            // previewUrl: "/kaimo-vue-demo/lib/pdfjs-2.14.305-legacy-dist/web/compressed.tracemonkey-pldi-09.pdf",
            previewUrl: "/kaimoApi/download?path=2b3a9f44cfc640ec93fdd81d40f0989e",
        }
    }
}
</script>

然后通过代理 kaimoApi 接口包即可:

module.exports = {
    publicPath: process.env.NODE_ENV === 'production' ? '/kaimo-vue-demo/' : '/kaimo-vue-demo',
    
    devServer: {
        proxy: {
            '^/kaimoApi': {
                target: 'http://127.0.0.1:6666',
                ws: true,
                changeOrigin: true
            },
        }
    }
}

在这里插入图片描述

这样就解决了我们的问题。

参考

  • 【pdfjs资源链接-https://github.com/mozilla/pdf.js/】
pdf.jspdf.worker.js
04-27
不想给积分的留下邮箱 或者直接去pdf.js 官网下载 不要浪费积分了
vuepdf.js实现pdf浏览,并隐藏下载、打印
q249859693的博客
06-29 4926
vuepdf.js实现pdf浏览,并隐藏下载、打印
vue项目怎么使用pdf.js 和docx-preview实现docx文件pdf文件的在线预览功能
最新发布
m0_56666971的博客
08-19 401
在一些项目中可能需要实现对docx文件pdf文件的在线预览功能,本文介绍可以使用前端插件渲染文件,能在一定程度上保存文件的格式。
vue使用pdf.js预览pdf文件
weixin_46044574的博客
07-20 2180
pdf.js
vue使用pdf.js
农民工
11-17 1658
vue使用pdf.js
Vue使用pdf.js实现在线预览pdf文件
qq_45585640的博客
09-07 8562
方法加载pdf文件流。可以将文件流作为Blob对象传递给该方法。此时,pdf文件已经被渲染成了一张图片。以上就是在Vue使用pdf.js实现在线预览pdf文件流的详细步骤。使用pdf.js的Renderer渲染pdf文件。此时,pdf文件已经加载到了pdf对象中。方法获取pdf页面的视图大小。
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
12-07
本文将详细介绍如何使用pdf.js插件来实现Vue中手机预览PDF文档。 首先,pdf.js是一个由Mozilla维护的开源库,它允许在浏览器中渲染PDF文件,而无需依赖任何第三方插件。你可以从GitHub上克隆pdf.js项目,然后使用...
vue实现在线预览pdf文件和下载(pdf.js
10-15
在本文中,我们将详细探讨如何使用Vue.js实现在线预览PDF文件以及下载功能,这采用的插件是pdf.js,一个广泛使用的开源PDF阅读器,由Mozilla基金会开发。 首先,了解pdf.js的基本概念非常重要。pdf.js能够将PDF...
vue或uniapp项目使用pdf.js预览PDF文件
08-09
Vue或UniApp项目中,预览PDF文件是一项常见的需求,尤其在开发阅读器或文档管理系统时。PDF.js是Mozilla开发的一个开源库,用于在浏览器中渲染PDF文档,支持多种平台和浏览器。在这个项目中,你将学习如何利用pdf....
Vue+ElementUI使用vue-pdf实现预览功能
10-15
Vue.js框架的项目中,使用vue-pdf插件可以非常方便地集成PDF文件预览功能。以下是从给定文件信息中提取出的关于实现Vue+ElementUI中使用vue-pdf实现PDF预览功能的知识点。 首先,要使用vue-pdf插件,需要通过npm...
PDF.js】2023 最新 PDF.jsVue3 中的使用
日常问题bug解决、学习分享、个人杂谈等等随便写写哈哈哈
11-21 1万+
官方地址中文文档PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。pdf.js 是社区驱动的,并由 Mozilla 支持。我们的目标是为解析和呈现 PDF 创建一个通用的、基于 Web 标准的平台。
vue 中如何使用pdf.js实现预览
C_TopTopTop的博客
06-14 1105
pdf.js文件预览 (4)实现 (5)问题 (6)解决引入的pdf.js文件中找到 if (fullRequestXhr.getResponseHeader('Accept-Ranges') !== 'bytes') { return false; }更换为
vuepdf.js使用细节/隐藏按钮/设置、获取当前页码/记录阅读进度/切换语言(国际化)
smm的博客
02-24 7556
vue使用pdf.js的细节问题调研:隐藏功能按钮,设置、获取当前页码(记录阅读进度)以及切换语言(国际化)
vue 使用 PDF.js 浏览pdf文件
shaoyahu的博客
12-27 6033
很头大 , 本来网络实际地址的 pdf 文件直接放在 iframe 的 src 中就可以浏览 pdf 文件的 , 但是对于虚拟地址来说 , 这样子只会让网页当场开始下载 pdf 文件到本地 , 而并不能在网页上浏览所以我赶紧网上搜罗搜罗 , 看看大家有什么好办法 , 并且记录下来 .这用的是 PDF.js 这个库 , 最后有组件的代码文件链接。
vue3项目使用pdf.js插件实现:搜索高亮、修改pdf.js显示的页码、向pdf.js传值、控制搜索、处理接口文件
热门推荐
wang13679201813的博客
04-14 2万+
官网下载地址:https://mozilla.github.io/pdf.js/getting_started/#download.1、使用pdfjs已经写好的viewer.html页面。下载后将pdf.js 放到服务器上 如:http://xxxx:8080/static/pdfjs。这种方法需要从官网上将pdf.js包下载下来。pdf.worker.js:负责核心解析。通过插件docx-preview实现。2、将PDF文件渲染成Canvas。pdf.js: 负责API解析,
vue+pdf.js预览本地pdf文件(可以复制文本,滚动页码展示)
Hi_MrXiao的博客
12-05 5816
3、解析pdf,获取pdf所有页数据,使用canvas渲染,并使用TextLayerBuilder创建文本层,可以复制文本信息。在这就是因为微任务导致,所以我们这渲染pdf任务可以每次渲染完一页后等待一定时间才执行下一页的渲染,空出时间给主线程。在渲染pdf数据时,当pdf文件很大渲染量很多时,会导致页面卡住,无法执行其他操作;在滚动时当前是第几页的页码同步更新展示:需要在渲染每页pdf时将每页的高度存起来,以及每页滚动的临界值。在滚动时,根据当前滚动距离和每页滚动的临界距离相比较,判断当前是第几页。
vue使用pdfjs
温润如风的博客
05-11 1万+
前言:在项目开发过程中,可能会遇到在线预览pdf功能,我就遇到了,期间真是一把心酸一把泪啊,最终把可以使用的结果记录下来,以便后面少采坑。 一、vue使用pdfjs 1、下载pdfjs 我把插件文件上传到csdn上了,下载地址 2、把下载的文件放到static下 我把文件放到了static/plugins/pdf下了,具体的位置可以自行调整 3、新建一个templete模板 模板中加入以下内容,获取到的pdf文件是以流的形式返回给插件的 html内容如下 <template> <d
vue使用PDF.js
m0_37296026的博客
01-24 1万+
PDF.js
vue使用pdf.js实现在线查看pdf文件
qq_37291064的博客
02-02 2184
在后续项目中又实现了该功能,没有遇到以上问题,盲猜是因为pdf dialog标签上加了v-if,光设置visible.sync只会控制元素的显示隐藏,不会重新渲染,总结:只要是dialog最好加上v-if,会避免很多问题。需求:有一个列表页,用户点击查看,弹层展示后台接口返回的pdf内容(不是文件、地址之类的,乱码的pdf铭文(二进制文件流))如果后端返回的是html,前端调用的接口responseType就不要用blob了,直接将返回结果放在v-html面。1、多次查看后头部内容不显示。
写文章

热门文章

  • ReferenceError: Cannot access ‘xxx‘ before initialization 86871
  • git 命令怎么删除远程分支 30903
  • 怎么使用可视化数据库工具 DBeaver 新建数据库表? 24914
  • git fatal: branch ‘master‘ does not exist 21031
  • git提示:The authenticity of host ‘github.com (13.229.188.59)‘ can‘t be established. 20403

分类专栏

  • Html / CSS 69篇
  • JavaScript 67篇
  • TypeScript 38篇
  • Jquery 1篇
  • Angular 技术栈
  • React 技术栈 10篇
  • Vue 技术栈 122篇
  • JavaScript 插件库 7篇
  • UI 库 12篇
  • Electron / 桌面端 1篇
  • 微信小程序
  • Flutter / RN / 移动端 2篇
  • Node / Node 框架 102篇
  • Git 31篇
  • Webpack / Rollup / Vite 78篇
  • Canvas / SVG / VML 4篇
  • WebGL / 计算机图形学 8篇
  • 动画 / 可视化 51篇
  • WebRTC / 音视频 4篇
  • V8 / 浏览器 82篇
  • Web 性能 6篇
  • Web 安全 9篇
  • Nginx / 服务器 1篇
  • Redis / 数据库 16篇
  • 测试与持续集成 4篇
  • 网络协议 12篇
  • 设计模式 3篇
  • 数据结构与算法 18篇
  • 前端工程架构 103篇
  • Linux / 计算机操作系统 2篇
  • 资源工具 28篇
  • 前端面试之道 27篇
  • 专栏小册合集 12篇
  • 游戏开发 2篇

最新评论

  • 怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)

    凯小默: 发了,注意查收

  • 怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)

    梦古: 大哥,可以发一份给我吗,abcde102978@qq.com

  • 【珠峰 WEB 前端架构师课程】学习笔记 100 篇(完结)

    凯小默: 我记得是看的b站up:不会cv,不过应该已经下架了

  • git提示:The authenticity of host ‘github.com (13.229.188.59)‘ can‘t be established.

    m0_51821005: 感谢,解决了!

  • 【珠峰 WEB 前端架构师课程】学习笔记 100 篇(完结)

    qq_58190957: b站的教程还有吗?求

大家在看

  • 大模型书籍推荐:Transformer自然语言处理: 构建语言应用,409页pdf
  • Redis为何单线程也能飞速执行?解密核心逻辑 1285
  • P11177 [ROIR 2018 Day1] 平方与立方 题解 886
  • React 进阶阶段学习计划
  • 毕业设计项目-基于springboot+vue家政服务管理平台系统+10000字论文

最新文章

  • nvm 安装 node 版本报错 Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt
  • npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘
  • git 命令怎么回退到指定的某个提交 commit hash 并推送远程分支?
2024年20篇
2023年173篇
2022年272篇
2021年141篇
2020年109篇
2019年69篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯小默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司去哪里找婚纱摄影网站优化网站优化兼职合同门户网站怎么优化天河外贸网站优化推广方案智能公司网站关键词优化福建网站关键词排名优化技巧武穴网站seo优化开发通州区网站优化排行榜优化推广需要自己有网站吗网站优化如何准确选择关键词庆阳网站优化排名太原网站优化多少钱云南网站建设推广优化网站优化首页网站营销优化徐州网站优化工作室网站自动优化软件 下载优化网站排名称赞火26星搜索引擎优化网站排名绵阳网站优化上海网站搜索优化邯郸家居行业网站优化推广方案六安网站优化电池充电江苏网站优化有哪些方式黄骅市网站优化优质微信网站优化平台开发手刷网站优化策划崇安区seo网站优化百姓网至尊标王衢州网站优化找哪家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化