分享基于PDF.JS的移动端PDF阅读器代码

news/2024/9/17 7:19:43/ 标签: pdf, 移动端, 阅读器

一、前言

在之前的文章《分享基于PDF.js的pdf阅读器代码》里提到了PC端基于PDF.js的阅读器,本文将提供针对移动端的版本。

pdfViewer_3">二、pdfViewer

为了能够直接使用,这里分享一下经过简单修改后能直接使用的pdfViewer代码:

pdfViewer代码目录(pdfViewer代码包本文查看附件):

在这里插入图片描述

以Vue工程为例:
①将pdfViewer代码放到pubilc目录下(pdfViewer代码包本文查看附件)
②使用下面的链接进行pdf访问:http://xxx/pdfViewer/web/viewer.html?file=pdfUrl,例如:http://localhost:9999/pdfViewer/web/viewer.html?file=http://localhost:9999/pdfViewer/web/compressed.tracemonkey-pldi-09.pdf

其中,http://xxx 为项目访问地址。

为了能够直接访问到viewer.html,对于Vite项目需要做一些配置:

// src\router\index.tsconst router = createRouter({history: createWebHistory(),...
})
// build\vite\plugin\html.ts/*** Plugin to minimize and use ejs template syntax in index.html.* https://github.com/anncwb/vite-plugin-html*/
import type { PluginOption } from 'vite'
import { createHtmlPlugin } from 'vite-plugin-html'export function configHtmlPlugin(env: ViteEnv) {const htmlPlugin: PluginOption[] = createHtmlPlugin({pages: [{filename: '/index.html',template: '/index.html',},{filename: '/mobile-viewer/viewer.html',template: '/public/pdfViewer/web/viewer.html'}]})return htmlPlugin
}
// build\vite\plugin\index.ts
import { configHtmlPlugin } from './html'/*** 配置 vite 插件* @param viteEnv vite 环境变量配置文件键值队 object* @param isBuild 是否是 build 环境 true/false* @returns vitePlugins[]*/
export function createVitePlugins(viteEnv: ViteEnv) {const vitePlugins: (PluginOption | PluginOption[])[] = [// have tovue()]// 加载 html 插件 vite-plugin-htmlvitePlugins.push(configHtmlPlugin(viteEnv))return vitePlugins
}
// vite.config.tsimport { createVitePlugins } from './build/vite/plugin'export default ({ command, mode }: ConfigEnv): UserConfig => {return {// 其它配置...// 加载插件plugins: createVitePlugins(viteEnv)}
}

预览效果:

在这里插入图片描述


http://www.ppmy.cn/news/1522637.html

相关文章

webpack - 五大核心概念和基本配置(打包一个简单HTML页面)

// 五大核心概念 1. entry(入口) 指示Webpack从哪个文件开始打包2. output(输出) 指示Webpack打包完的文件输出到哪里去,如何命名等3. loader(加载器) webpack本身只能处理js,json等…

如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?

在当今的互联网世界中,网络请求是数据交换的基础。无论是在开发Web应用程序、自动化测试还是进行数据抓取,掌握如何发送网络请求是一项基本技能。Lua,作为一种轻量级、高性能的脚本语言,经常被用于这些场景。本文将详细介绍如何使…

C++11新增特性:列表初始化(std::initializer_list) decltype、auto、nullptr、范围for

C11新增特性:列表初始化(std::initializer_list)& decltype、auto、nullptr、范围for 一、C11新增统一初始化方式1.1 新增方式1.2 初始化容器底层原理(std::initializer_list) 二、新增声明2.1 decltype2.3 auto &…

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:error是设置我们失败的logo 设置的文字上…

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不…

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,fr…

DPDK基础入门(五):报文转发

网络处理模块划分 Packet Input: 接收数据包,将其引入处理流程。Pre-processing: 对数据包进行初步处理,例如基本的检查和标记。Input Classification: 细化数据包的分类,例如基于协议或流进行分流。Ingress Queuing: 将数据包放入队列中进行…

Dubbo 安全方面措施

在分布式系统中,安全性是一个至关重要的因素,特别是对于像 Dubbo 这样的高性能 RPC 框架,确保服务的安全性和数据传输的完整性至关重要。Dubbo 作为一个成熟的分布式服务框架,在安全性方面提供了多种措施和配置选项,帮…

uniapp 给画作生成画框

<template><ax-page class"privateCustom"><gui-page :customHeader"true" ref"guipage"><template #gHeader><aHeader title"个性定制" :showTitle"true" back"2"></aHeader&g…

深度学习与大模型第4课:使用多种模型在Pima印度糖尿病数据集上的分类效果评估

文章目录 技术博客&#xff1a;使用多种模型在Pima印度糖尿病数据集上的分类效果评估数据集介绍数据预处理模型一&#xff1a;逻辑斯谛回归&#xff08;Logistic Regression&#xff09;模型二&#xff1a;支持向量机&#xff08;SVM&#xff09;模型三&#xff1a;决策树&…

1、正则表达式

1、正则表达式是一种用于描述文本模式的工具。它是由字符和特殊符号组成的字符串&#xff0c;描述了模式的重复或者多个字符&#xff0c;于是就可以按照某种模式匹配一系列有相似特征的字符串。它主要的作用是将文本用某种可被计算机识别的模式表现出来&#xff0c;为高级的文本…

Helm Deploy Online Rancher v2.9.1

文章目录 准备安装查看下载 准备 $ kubectl get node NAME STATUS ROLES AGE VERSION kube-master01 Ready control-plane 19d v1.29.5 kube-node01 Ready <none> 19d v1.29.5 kube-node02 Ready <none&…

Tekton简介,安装和构建最简单ci/cd

简介 Tekton是一种基于k8的支持CI/CD的operator。 说到持续集成&#xff0c;我们比较熟悉的有jenkins&#xff0c;gitlab ci等&#xff0c;但只有Tekton是云原生的。 既然Tekton是一种operator&#xff0c;那就必须了解它的CRD&#xff0c;然后我们定义CR&#xff0c;让Tekt…

WebAPI (一)DOM树、DOM对象,操作元素样式(style className,classList)。表单元素属性。自定义属性。间歇函数定时器

文章目录 Web API基本认知一、 变量声明二、 DOM1. DOM 树2. DOM对象3. 获取DOM对象(1)、选择匹配的第一个元素(2)、选择匹配多个元素 三、 操作元素1. 操作元素内容2. 操作元素属性(1)、常用属性&#xff08;href之类的&#xff09;(2)、通过style属性操作CSS(3)、通过类名(cl…

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、…

golang hertz框架入门

两种模式新建项目 1、手动新建项目 2、使用hz工具新建项目 一、手动创建项目&#xff0c;并拉取框架 1、新建项目目录 hertz_demo_w 2、在项目跟目录新建main.go 文件 package mainimport ("context""github.com/cloudwego/hertz/pkg/app""github.…

API安全 | 发现API的5个小tips

在安全测试目标时&#xff0c;最有趣的测试部分是它的 API。API 是动态的&#xff0c;它们比应用程序的其他部分更新得更频繁&#xff0c;并且负责许多后端繁重的工作。在现代应用程序中&#xff0c;我们通常会看到 REST API&#xff0c;但也会看到其他形式&#xff0c;例如 Gr…

C# 使用国密SM4加密解密

首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09;&#xff0c;支持.NET 4,.NET Standard 2.0 目录 使用BouncyCastle指定填充方案 零填充&#xff08;Zero Padding&#xff09; PKCS7填充&…

MariaDB基本知识汇总

/* MariaDB 1、视图 2、临时表 3、自定义函数 4、存储过程 5、触发器 6、游标 7、变量声明与赋值 8、常用函数&#xff08;日期格式&#xff0c;Guid&#xff0c;判断&#xff0c;循环&#xff0c;XML格式操作&#xff09; 9、动态执行SQL 语句 10、开启执行计划 11、创建登录M…

AI智能分析/智慧安防EasyCVR视频汇聚平台新版本(V3.6.0)播放鉴权与播放限制时长的区别介绍

随着科技的飞速发展&#xff0c;视频技术已成为现代社会不可或缺的一部分&#xff0c;广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。EasyCVR视频汇聚平台作为视频技术的佼佼者&#xff0c;不断推陈出新&#xff0c;通过功能更新迭代&#xff0c;为用户提供更加…