pdfjs转图片_PDF转图片,PDF转JPG/PNG,完全由JS实现-阿里云开发者社区
原理
使用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();
});
}
预览:
pdfjs转图片_PDF转图片,PDF转JPG/PNG,完全由JS实现-阿里云开发者社区相关推荐
- swift 将图片保存到本地_swift 图片存储到本地文件的搜索结果-阿里云开发者社区...
iOS - UIImageView 前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImageView : UIView @available(iOS 2.0, ...
- oss子账号_【最佳实践】授权子账号进行OSS图片样式设置-阿里云开发者社区
1.引子:如何授权子账号在控制台针对指定的Bucket设置图片样式呢? [使用场景]:某企业内部有众多Bucket,并且不同的Bucket分别指定了Bucket的管理员.目前Bucket A的管理员期 ...
- python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印-阿里云开发者社区...
python-尝试将Excel文件保存为图片并加上水印 场景:并不是将 excel 的 chart 生成图片,而是将整个表格内容生成图片. 1. 准备工作 目前搜索不到已有的方法,只能自己尝试写一个, ...
- c#如何wmf图片转换成png图片_【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件-阿里云开发者社区...
最近研究了一下DICOM和BMP文件转换的问题,也是很头大.度娘了很久,也在CSDN等论坛看到一些断断续续的文件,最主要的是代码只是片断,不是完整的实现.头大了. 首先,了解一下BMP文件格式,BMP ...
- android 照片拼接长图_Android拼接合并图片生成长图-阿里云开发者社区
Android拼接合并图片生成长图 代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放. 假设根目录的Pict ...
- html读取oss_oss获取图片链接的搜索结果-阿里云开发者社区
OSS 图片处理 作者:张医博 背景 针对 OSS case 的基础排查,以及如果查看图片基础原始参数进行故障定位 必要信息 处理图片的需求请描述清楚 图片处理的原图链接 图片处理后的链接 查看图片原 ...
- qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...
简述 Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能.Item 可以处理键盘事 ...
- itext设置pdf的尺寸_如何获取pdf文档iText 7的页面大小-问答-阿里云开发者社区-阿里云...
我在iText 7中有一个Java程序,可以接收JSON数据并生成一个PDF文档(带有页眉和页脚),该文档可以很好地处理clientData注释中的变量中的数据,但是当在无注释clientData中使 ...
- java xsl转换pdf_Java 生成PDF文档-阿里云开发者社区
最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XM ...
- .net pdf转图片_PDF转图片要怎么转?两分钟解决!
PDF转图片要怎么转?在我们的实际工作当中,很多时候会碰到这样的问题:如何把我的PDF文档转换成图片进行分享呢? 有些小伙伴会用截图的方式把PDF文件存为图片,但是这样图片的质量不高,在手机里很难看清 ...
最新文章
- 2019年末,10 位院士对 AI 的深度把脉(上)
- 德国再出颠覆性发明,这次要安排我们的快递
- 关于Qomo于ajax的异同~
- 力扣——按递增顺序显示卡牌
- 解决 vue 项目一直出现 sockjs-node/info?t=1554978**** ,并造成浏览器不能及时更新编码改动结果
- HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)
- 延迟任务调度系统—技术选型与设计(上篇)
- 【转】XCode环境变量及路径设置 -- 待学习
- python datetime 加一个月_Python日期的加减等操作的示例
- Python path
- ios property 之 strong weak unsafe_unretained
- 第一章第一节第一课时智能训练(2012-01-18 18:42:23)
- 谷歌浏览器---日常使用设置
- Pareto相关理论
- QQ批量挂机(python实现)
- 为什么“码农”需要自我营销?
- 如何拥有一个免费云服务器
- oracle dul误删数据,案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表...
- linux nvcc未找到命令,打印本页 - nvcc命令无法识别
- 【Minio】实现视频断点续传功能
热门文章
- 论win10专业版,企业版和教育版之间自由切换的方法和密钥
- python正则匹配数字_python——正则匹配数字
- mysql as用法_数据库 as 用法
- 计算机科学与技术保研好不好,2021年北京邮电大学计算机科学与技术专业保研成功上岸经验指导...
- Fisher discrimination criterion (费舍尔判别准则)
- c语言三个学生每人四门,C语言一道题目,求教教3.统计一个班的学生成绩。要求程序具有如下功能:(1) 每个学生的学号和四门功课的成绩从键盘读入。...
- 人资(人事)送命连环问,51个问题。
- 【leetcode】995. Minimum Number of K Consecutive Bit Flips
- 吾欲使汝为恶,则恶不可为;使汝为善,则我不为恶。
- 线性代数01:函数对向量、矩阵的梯度(向量、矩阵求导)