【pdf.js】pdf文件转canvas,在h5页面直接浏览PDF文件

前段时间项目有一个需求,PDF文件要在线浏览,应用到 pdf.js,一些应用经验记录一下。

一、解决过程

    1、首先有一个参考的网站,根据参考,发现PDF文件的每一页都被转成了 canvas

    2、第一反应是将PDF文件每一页,先转成 IMG,然后再将图片放到画布上。(难点:img 转 canvas)

var img = new Image();
img.src = '../../../assets/src/images/0_2.png';
img.onload = function () {
    //创建canvas DOM对象,并设置其宽高和图片一样
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    //坐标(0,0)表示从此处开始绘制,相当于偏移
    canvas.getContext("2d").drawImage(img, 0, 0);
    $('body').append(canvas)
}

这种方式可以实现 img 转 canvas,但pdf不止一页,并且还需要先将pdf先转成img ,所以觉得不可行。

  3、然后就找到了 pdf.js 可以将pdf的每一页转成canvas

二、pdf.js的用法

官网地址:http://mozilla.github.io/pdf.js/

在官网的例子里,写了用法,但是转canvas的时候需要指定pdf的具体页数(每次只能转一页)

  html部分

<canvas id="the-canvas"></canvas>

  js部分(记得要先引pdf.js库,可以在官网下载)

pdfjsLib.getDocument('pdf文件地址').promise.then(function(pdf) {
      pdf.getPage(1).then(function(page) {
            var scale = 1.5;
            var viewport = page.getViewport({ scale: scale, });
            var canvas = document.getElementById('the-canvas');
            var context = canvas.getContext('2d');
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            var renderContext = {
                canvasContext: context,
                viewport: viewport
            };
            page.render(renderContext);
      });
});
//这样就可以将pdf文件的第一页加载到页面的canvas元素里了

第二种:pdf文件为多页

html部分

<div id="canvas"></div>

js部分

//创建canvas元素
function createPdfContainer(id, className) {
    var pdfContainer = document.getElementById('canvas');
    var canvasNew = document.createElement('canvas');
    canvasNew.id = id;
    canvasNew.className = className;
    pdfContainer.appendChild(canvasNew);
};

//建议给定pdf宽度
function renderPDF(pdf, i, id) {
    pdf.getPage(i).then(function (page) {
        var scale = 4;  //scale的值是canvas的渲染尺寸,影响清晰度
        var viewport = page.getViewport({
	    scale: scale
        });
    //
    //  准备用于渲染的 canvas 元素
    //
        var canvas = document.getElementById(id);
        var context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;
    //
    // 将 PDF 页面渲染到 canvas 上下文中
    //
        var renderContext = {
            canvasContext: context,
	    viewport: viewport
        };
        page.render(renderContext);
    });
};
		
//创建和pdf页数等同的canvas数
function createSeriesCanvas(num, template) {
    var id = '';
    for (var j = 1; j <= num; j++) {
        id = template + j;
	createPdfContainer(id, 'pdfClass');
    }
}

//读取pdf文件,并加载到页面中
function loadPDF(fileURL) {
    pdfjsLib.getDocument(fileURL).promise.then(function (pdf) {
        //用 promise 获取页面
	var id = '';
	var idTemplate = 'cw-pdf-';
	var pageNum = pdf.numPages;  //pdf文件总页数
	//根据页码创建画布
	createSeriesCanvas(pageNum, idTemplate);
	$("#canvas canvas").css("width", "100%");  //canvas展示宽度
	//将pdf渲染到画布上去
	for (var i = 1; i <= pageNum; i++) {
	    id = idTemplate + i;
	    renderPDF(pdf, i, id);
	}
    });
}
//调用
loadPDF('pdf文件路径')

这样多页的pdf文件就可以转成canvas在线预览了。

特别提醒:Note: the worker is not enabled for file:// urls, so use a server.

前端直接用浏览器打开无法预览,所以需要搭建本地服务,或者放到服务器上。

demo地址:https://github.com/MeichaoWen/pdftocanvas

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
H5(HTML5)是一种用于构建网页和应用程序的技术标准,而JS(JavaScript)是一种脚本语言,用于为网页添加交互效果和功能。在H5和JS的结合下,我们可以实现在网页上直接查看PDF文件的功能。 要实现在H5 JS页面中查看PDF文件,我们通常使用一些开源的PDF库,如pdf.jspdf.js是一个由Mozilla开发的库,可以在浏览器中直接加载和渲染PDF文档。 具体步骤如下: 1. 引入pdf.js库:在HTML页面的`<head>`标签中,添加引入pdf.js库的代码。可以通过在CDN上获取最新版本的库文件,例如: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script> ``` 2. 创建容器元素:在HTML页面中,创建一个用于显示PDF内容的容器元素,例如一个`<div>`元素,同时为其指定一个id,例如`pdfContainer`: ```html <div id="pdfContainer"></div> ``` 3. 编写JavaScript代码:在HTML页面的`<script>`标签中,编写JavaScript代码来加载和渲染PDF文档: ```javascript // 创建PDF渲染器 const pdfContainer = document.getElementById('pdfContainer'); const pdfRenderer = pdfjsLib.getDocument('path/to/pdf/file.pdf'); // 渲染PDF页面 pdfRenderer.promise.then(function(pdf) { for (let i = 1; i <= pdf.numPages; i++) { pdf.getPage(i).then(function(page) { const canvas = document.createElement("canvas"); const canvasContext = canvas.getContext('2d'); const viewport = page.getViewport({scale: 1.5}); // 设置缩放比例 canvas.height = viewport.height; canvas.width = viewport.width; page.render({ canvasContext, viewport }); pdfContainer.appendChild(canvas); }); } }); ``` 以上代码会将PDF的每一页渲染成一个画布元素,并将其添加到`pdfContainer`容器中显示。 通过上述步骤,我们就可以在H5 JS页面直接查看PDF文件了。虽然这只是一个简单的演示示例,但通过使用pdf.js库,我们可以实现更多高级的PDF处理功能,如搜索、缩放和导航等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值