pdfjs转图片_PDF转图片,PDF转JPG/PNG,完全由JS实现-阿里云开发者社区

本文介绍了如何使用pdf.js库将PDF文档转换为图片,包括预览、渲染PDF页面到canvas,以及将canvas内容导出为JPG或PNG格式。通过在浏览器中运行JavaScript代码,无需本地支持即可实现PDF到图片的转换。
摘要由CSDN通过智能技术生成

原理

使用pdf.js预览图片,pdf.js将pdf通过canvas将每一页渲染出来,然后我们通过canvas的toDataURL方法保存为jpg或png格式。

pdf.js是Mozilla开源的一个js库,无需任何本地支持就可以在浏览器上显示pdf文档。唯一的要求就是浏览器必须支持HTML5。

依赖

需要pdf.min.js和pdf.worker.min.js两个js文件

全部代码实现

pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdn.bootcss.com/pdf.js/2.2.228/pdf.worker.min.js';

const preview = document.getElementById('preview');

const page_num = document.getElementById('page_num');

const out_type = document.getElementById('out_type');

let pdfFile, pdf, pageNum, context = preview.getContext('2d');

out_type.querySelectorAll('.button').forEach(function (btn) {

btn.onclick = function () {

out_type.querySelector('.primary').classList.remove('primary');

btn.classList.add('primary');

}

});

// 加载PDF文件

function loadPDF(file) {

pdfFile = file;

file_name.innerHTML = file.name;

let reader = new FileReader();

reader.onload = (e) => showPDF(e.target.result);

reader.readAsDataURL(file);

}

// 预览PDF

function showPDF(url) {

let loadingTask = pdfjsLib.getDocument(url);

loadingTask.promise.then(function (doc) {

pdf = doc;

pageNum = 1;

preview.hidden = false;

readerPage()

}, function (reason) {

alert(reason)

});

}

// 预览上一页

function prevPage() {

if (pageNum <= 1) {

return;

}

pageNum--;

readerPage()

}

//预览下一页

function nextPage() {

if (pageNum >= pdf.numPages) {

return;

}

pageNum++;

readerPage()

}

//渲染页面

function readerPage(callback) {

pdf.getPage(pageNum).then(function (page) {

let scale = 1.5;

let viewport = page.getViewport({scale: scale});

preview.height = viewport.height;

preview.width = viewport.width;

let renderContext = {

canvasContext: context,

viewport: viewport

};

page.render(renderContext).promise.then(callback);

});

page_num.innerText = `页码 : ${pageNum} / ${pdf.numPages}`;

}

// 保存当前页

function save() {

let a = document.createElement('a');

let event = new MouseEvent('click');

let type = out_type.querySelector('.primary').innerText.toLowerCase();

a.download = pdfFile.name + '-' + pageNum + '.' + type;

a.href = preview.toDataURL(type === 'png' ? 'image/png' : 'image/jpeg');

a.dispatchEvent(event)

}

//保存全部页面

function saveAll() {

pageNum = 1;

savePage()

}

function savePage() {

if (pageNum > pdf.numPages) {

alert('全部保存成功');

return

}

readerPage(function () {

save();

pageNum++;

savePage();

});

}

预览:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值