vue2实现pdf预览兼容低版本浏览器

一、背景

浏览器chrome 58版本、vue2项目、pdf预览

二、踩坑

一开始使用的是vue-pdf(版本4.1.0,依赖pdfjs-dist版本2.4.456)实现pdf预览,在高版本浏览器可以正常预览,但是在低版本浏览器样式错乱

三、解决方案

TouchPDF是一个简单的 jQuery Web PDF 查看器。它基于pdf.js库,支持滑动页面和缩放的移动手势。

1.特征

  • 用手指滑动到下一页或上一页
  • 捏合以放大和缩小
  • 点击指向文档部分或外部 URL 的链接
  • 添加彩色选项卡以快速访问书签页面
  • 直接在 DOM 中加载,无需 iFrame

2.支持的浏览器

Firefox、Chrome、Opera、IE >= 9、Safari、Android 浏览器

3.开始

jQuery 插件 要获取插件的本地副本,请使用 git 克隆它:

复制代码
git clone https://github.com/loicminghetti/touchpdf.git

注意:您需要启动本地 Web 服务器,因为某些浏览器不允许打开 file:// url 的 PDF 文件。

将以下内容添加到文档的<head>

复制代码
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="pdf.compatibility.js"></script>
<script type="text/javascript" src="pdf.js"></script>
<script type="text/javascript" src="jquery.touchSwipe.js"></script>
<script type="text/javascript" src="jquery.panzoom.js"></script>
<script type="text/javascript" src="jquery.mousewheel.js"></script>
<script type="text/javascript" src="jquery.touchPDF.js"></script>
<link href="jquery.touchPDF.css" rel="stylesheet" media="screen" /> 

vue项目中外部引入的静态资源可以放在public文件夹下,建lib或者plugins文件夹,引入路径写法

<script type="text/javascript" src="plugins/touchPDF/jquery.touchPDF.js"></script>

复制代码
<!DOCTYPE html>
<html>
  <head>
    <!-- 其他head内容 -->
    <link rel="stylesheet" href="<%= BASE_URL %>lib/touchPDF/touchPDF.css">
  </head>
  <body>
    <div id="app"></div>
    <!-- 先引入jQuery -->
    <script src="<%= BASE_URL %>lib/jquery/jquery.min.js"></script>
    <!-- 再引入touchPDF -->
    <script src="<%= BASE_URL %>lib/touchPDF/touchPDF.js"></script>
  </body>
</html>

在文档中添加一个空 div,该 div 将包含 PDF 查看器

复制代码
<div id="myPDF"></div>

通过在文档末尾添加以下脚本来加载 PDF 文件

复制代码
<script type="text/javascript">
  $(function() {
    $("#myPDF").pdf( { source: "yourfile.pdf",loaded:loaded方法} );
  });
</script>

您还可以将书签选项卡添加到 PDF 显示中:

复制代码
$(function() {      
  $("#myPDF").pdf( {
    source: "demo.pdf",
    tabs: [
      {title: "Tab 1", page: 2, color: "orange"},
      {title: "Tab 2", page: 3, color: "green"},
      {title: "Tab 3", page: 5, color: "blue"},
    ]
 });
});

Viewer 选项

选择 类型 违约 描述
字符串 " " 要显示的 PDF 文件的路径。
标题 字符串 "触摸PDF" 要在工具栏中显示的 PDF 的标题。
制表符 数组 [ ] 要在侧面显示的选项卡数组。语法见下文。
选项卡颜色 字符串 "米色" 所有选项卡的默认背景颜色。可用颜色有"绿色"、"黄色"、"橙色"、"棕色"、"蓝色"、"白色"、"黑色",您可以使用 CSS 定义自己的颜色。
禁用缩放 布尔 禁用 PDF 文档的缩放。默认情况下,可以使用滚动、两根手指捏合、+/- 键和工具栏按钮来缩放 PDF。
禁用滑动 布尔 禁用滑动到 PDF 文档的下一页/上一页。默认情况下,可以使用一根手指滑动 PDF。
禁用链接 布尔 禁用 PDF 文档上的所有内部和外部链接。
disableKeys 布尔 禁用下一页/上一页的箭头键和缩放的 +/- 键(如果启用了缩放)。
重新绘制窗口调整大小 布尔 在窗口调整大小时强制调整 PDF 查看器的大小。
pdf比例 1 定义 PDF 页面大小与选项卡大小之间的比率。
质量 2 设置加载的 PDF 页面的质量比率。设置为 2,当用户放大到 200% 时显示清晰。
显示工具栏 布尔 在文档顶部显示一个工具栏,其中包含标题、页码以及下一页/上一页和缩放的按钮。
加载 功能 加载 PDF 文档时(显示第一页之前)触发的处理程序。
改变 功能 每次显示新页面时触发的处理程序。
加载HTML 字符串 "正在加载 PDF" 在加载文档之前显示在白页上的文本或 HTML。
加载高度 整数 841 加载文档之前显示的白页高度(以像素为单位)(默认为 A4 高度)。
loadingWidth (加载宽度) 整数 595 加载文档前显示的白页宽度(以 px 为单位)(默认为 A4 宽度)。

Tab 属性

必须使用具有以下属性的 json 对象定义每个选项卡:

属性 类型 违约 描述
标题 字符串 命令的 要在选项卡上显示的文本。少于 3 个字符的文本将水平显示,较长的文本将垂直显示。
整数 命令的 要链接的 PDF 文档页码。页码从 1 开始。
颜色 字符串 如查看器中所定义 为选项卡设置不同的颜色。有关可用颜色,请参阅上文。
抵消 整数 0 用小偏移量填充标签,以便用户知道后面有隐藏的标签。从 0 开始。
返回页首 整数 定义 将选项卡从PDF文档顶部对齐给定的像素数。默认情况下,选项卡一个接一个地放置。
整数 定义 将选项卡从PDF文档底部按给定的像素数对齐。
高度 整数 定义 为选项卡设置特定高度。默认情况下,制表符高度将取决于标题中的字符数。

四、使用注意事项

1.配置项中loaded设置加载页码页面,loaded需是一个方法,用来返回展示页码。

2.如果需要关闭鼠标缩放pdf功能,配置项中设置disableZoom为true(touchPDF文件夹下的jquery.touchPDF.js中可看到配置项字段)。同时需要隐藏工具栏中的缩小放大按钮,可以用css样式隐藏。

3.在项目中html引入css依赖时,可能会影响全局样式,需要将css文件单独放在使用pdf的页面。

vue页面写法

复制代码
<template>
    <div class="pdf-container">
        <link href="plugins/touchPDF/jquery.touchPDF.css" rel="stylesheet" media="screen" />
        <!-- 内容 -->
         <div class="content"></div>
    </div>
</template>
相关推荐
六元七角八分18 小时前
CSDN文章如何转出为PDF文件保存
开发语言·javascript·pdf
涔溪18 小时前
Vue 中实现 PDF 文件上传
javascript·vue.js·pdf
blog_wanghao19 小时前
PDF文件内容出现重叠现象解析
c++·pdf
2501_930707781 天前
使用C#代码在 PDF 中创建目录
pdf
随便叫个啥呢1 天前
java使用poi-tl模版+vform自定义表单生成word,使用LibreOffice导出为pdf
java·pdf·word
随便叫个啥呢2 天前
java使用poi-tl模版+vform自定义表单生成word,使用LibreOffice导出为pdf,批量下载为压缩文件
java·pdf·word·zip
CodeCraft Studio2 天前
国产化Word处理控件Spire.Doc教程:使用Java将RTF文件转换为PDF的全面教程
java·pdf·word·spire.doc·rtf转pdf·文件格式转换·文档开发sdk
CodeCraft Studio3 天前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf
雾江流3 天前
WPS国际版18.22 | 集Word,PDF,Sheet,PowerPoint于一体的多功能免费办公套件
pdf·word·软件工程·wps
Jay_Franklin3 天前
Python中使用sqlite3模块和panel完成SQLite数据库中PDF的写入和读取
数据库·笔记·python·pycharm·sqlite·pdf·py