viewerjs官网,jsviews

http://www.itjxue.com  2023-01-18 04:49  来源:未知  点击次数: 

如何创建pdf的buffer,让pdf.js实现预览pdf文件

PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品。简单说就是一个 PDF 解析器。运用HTML5JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。

在线示例: ,

源码:

官网:

pdf.js VS 传统浏览器读取pdf

一般来说,PDF档案格式都是在浏览器中由外挂程式来描绘,通常是Adobe自己的PDF reader或来自其他供应商的描绘工具,但这些外挂通常无法充分运用PDF的特点,而且由于含有大量的受信任代码,使得Google Chrome浏览器必须运用SandBox沙箱原理,来检查PDF描绘工具是否遭到未知病毒感染。

使用adobe,必须在本地安装软件才能使用,而pdf.js不依赖环境、渲染速度快(测试过,确实很快)、安全性高。

pdf.js渲染PDF文件

pdf.js渲染PDF文件的流程:Fetch pdf (url / buffer) —— canvas —— 渲染

如果要深入pdf的渲染,需要去研究pdf.js源代码。pdf.js可通过pdf文件的地址或pdf数据流获取pdf,具体实现是调用接口函数 PDFJs.getDoc(url/buffer)将pdf载入html,通过canvas处理, 然后渲染pdf文件。网上给出的都是通过url来获取pdf的例子,而我在做项目的时候,后台(python)要求是发pdf的数据流给前台,前台接收pdf的buffer,然后通过pdf.js来渲染。当然最初尝试buffer出现了很多问题,具体问题总结如下:

1)如何通过$.ajax接收后台发给前台的buffer数据;

2)如何将buffer传给pdf.js来处理(这里我使用了viewer.js, 所以需要考虑的是如何将buffer传给viewer.js来处理);

3)如何将pdf.js转换成pdf.js可以接收的buffer格式;

(对应问题解决见代码注释)

注:viewer.js是pdf.js的扩展,其将打印、翻页、缩放等功能进行了实现,且界面非常好看。也就是说如果你引入了viewer.js,pdf的渲染和渲染之后的功能界面都已经帮你实现了,你不用自己去写界面。

先从官网: 下载代码,然后使用文件viewer.html , 我的html就是在viewer.html 的基础上修改的,下面我给出buffer的例子:

!DOCTYPE html

html dir="ltr" mozdisallowselectionprint moznomarginboxes

head

meta charset="utf-8"

meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"

meta name="google" content="notranslate"

title在线预览/title

{% load static %}{% get_static_prefix as STATIC_URL %}

link href="{{STATIC_URL}}css/preview.css" rel="stylesheet" type="text/css" /

link rel="stylesheet" href="{{STATIC_URL}}pdfjs/web/viewer.css"/

script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/compatibility.js"/script

link rel="resource" type="application/l10n" href="{{STATIC_URL}}pdfjs/web/locale/locale.properties"/

script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/l10n.js"/script

script type="text/javascript" src="{{STATIC_URL}}pdfjs/build/pdf.js"/script

script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/debugger.js"/script

script src="{{STATIC_URL}}js/jquery-1.8.3.js" type="text/javascript"/script

script type="text/javascript"

//convertDataURIToBinary()

//不知道什么原因如果后台直接将pdf的数据流发给前台,得到的是乱码,将数据转换成 Uint8Array始终不成功

//所以就让后台将发送之前的数据流做 了base64编码发给前台,前台再解码得到的数据就不是乱码了。

var BASE64_MARKER = ';base64,';

var preFileId = {{mark}};

//viewer.js全局变量,传入buffer,回答问题2

var DEFAULT_URL

$(document).ready(function(){

$.ajax({

type:"post",

async: false,

//ajax接收pdf数据流,注意dataType值的设置是否有错,如果不指定,jQuery将自动根据HTTP包MIME信息返回

//responseXML或responseText . 回答问题1

contentType:"application/pdf;charset=utf-8",

url:"{% url netPan.File.views.browserFuf%}",

data:{

id: preFileId

},

success:function(data){

var pdfAsDataUri = data;

//如果引入了viewer.js , 处理方法

var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);

DEFAULT_URL = pdfAsArray;

// 只引入了pdf.js, 未引入viewer.js, 处理方法

// var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);

// PDFJS.getDocument(pdfAsArray).then(); 自己写pdf的处理函数

}

});

});

function convertDataURIToBinary(dataURI) { //编码转换,回答问题3

var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;

var base64 = dataURI.substring(base64Index);

var raw = window.atob(base64);

var rawLength = raw.length;

//转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068

var array = new Uint8Array(new ArrayBuffer(rawLength));

for(i = 0; i rawLength; i++) {

array[i] = raw.charCodeAt(i);

}

return array;

}

/script

!--先设置全局变量DEFAULT_URL 的值,所以要后调入viewer.js --

script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/viewer.js"/script

/head

body

省略内容

/body

/html

viewerjs点击两次

确定。viewerjs是指图像插件,点击一次是确定的指令,点击两次就是锁定,对于图像都是锁定状态,所以要点击两次。

在vue项目中使用viewerjs

npm install viewerjs

名称 类型 默认值 说明

inline 布尔值false启用 inline 模式

button 布尔值 true 显示右上角关闭按钮(jQuery 版本无效)

navbar 布尔值/整型 true 显示缩略图导航

title 布尔值/整型 true 显示当前图片的标题(现实 alt 属性及图片尺寸)

toolbar 布尔值/整型 true 显示工具栏

tooltip 布尔值 true 显示缩放百分比

movable 布尔值 true 图片是否可移动

zoomable 布尔值 true 图片是否可缩放

rotatable 布尔值 true 图片是否可旋转

scalable 布尔值 true 图片是否可翻转

transition 布尔值 true 使用 CSS3 过度

fullscreen 布尔值 true 播放时是否全屏

keyboard 布尔值 true 是否支持键盘

interval 整型 5000 播放间隔,单位为毫秒

zoomRatio 浮点型 0.1 鼠标滚动时的缩放比例

minZoomRatio 浮点型 0.01 最小缩放比例

maxZoomRatio 数字 100 最大缩放比例

zIndex 数字 2015 设置图片查看器 modal 模式时的 z-index

zIndexInline 数字 0 设置图片查看器 inline 模式时的 z-index

url 字符串/函数 src 设置大图片的 url

build 函数 null 回调函数

built 函数 null 回调函数

show 函数 null 回调函数

shown 函数 null 回调函数

hide 函数 null 回调函数

hidden 函数 null 回调函数

view 函数 null 回调函数

viewed 函数 null 回调函数

(责任编辑:IT教学网)

更多

推荐Mail服务器文章