js 打印pdf word js word转pdf - 电脑 - 【龙岩电脑网】_龙岩电脑维修_龙岩笔记本电脑维修_监控安装_市区上门维修
公司动态

js 打印pdf word js word转pdf

摘要:如何创建pdf的buffer,让pdf js实现预览pdf文件pdf js简介PDF js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品。简单说就是一个 PDF 解析器。运用...

发布日期:2020-09-12

js 打印pdf word

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

pdf.js简介PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品。

简单说就是一个 PDF 解析器。

运用HTML5JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。

其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。

在线示例: http://jsbin.com/pdfjs-helloworld-v2/1/edit , http://jsbin.com/pdfjs-prevnext-v2/1/edit源码:https://github.com/mozilla/pdf.js官网:http://mozilla.github.io/pdf.js/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的渲染和渲染之后的功能界面都已经帮你实现了,你不用自己去写界面。

先从官网:http://mozilla.github.io/pdf.js/ 下载代码,然后使用文件viewer.html , 我的html就是在viewer.html 的基础上修改的,下面我给出buffer的例子:在线预览 {% load static %}{% get_static_prefix as STATIC_URL %} //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 array[i] = raw.charCodeAt(i); } return array; } 省略内容