[在线DEMO](https://oktools.net/pdf2img)

原理

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

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

依赖

需要pdf.min.jspdf.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();
});
}

预览:

PDF转图片,在线PDF转JPG/PNG的更多相关文章

  1. Aspose.Pdf合并图片到PDF文件

    将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...

  2. Linux入门(13)——Ubuntu16.04下将图片和pdf互转

    Ubuntu16.04下将图片和pdf互转 将图片转为PDF: convert 图片 PDF convert pic.jpg pic.pdf 将PDF转为图片: convert PDF 图片 conv ...

  3. 在线提取PDF中图片和文字

    无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测 ...

  4. 在线扫描PDF JPG 图片上面文字

    在线扫描PDF JPG 图片上面文字

  5. 非在线PDF转图片!!!

    关于非在线 由于这次要转的是身份证,不是阴谋论,防人之心还是要有的.万一呢. 关于工具 试了好多工具,有一家软件竟然是反过来的,即图片转pdf.也给搜了出来,主要的是下载页面还显示的pdf转图片,啊呸 ...

  6. pdf.js实现图片在线预览

    项目需求 前段时间项目中遇到了一个模块,是关于在线预览word文档(PDF文件)的,所以,找了很多插件,例如,pdf.js,pdfobject.js框架,但是pdfobject.js框架对于IE浏览器 ...

  7. C# 添加文本、图片到PDF文档(基于Spire.Cloud.PDF.SDK)

    Spire.Cloud.PDF.SDK提供了接口PdfTextApi及PdfImagesApi用于添加文本和图片到PDF文档,添加文本时,可格式化文本样式,包括文本字体类型.字号.字体样式.文本颜色. ...

  8. 「 神器 」在线PDF文件管理工具和图片编辑神器

    每天进步一丢丢,连接梦与想 在线PDF文件管理工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JP ...

  9. html页面转PDF、图片操作记录

    前言 日常开发中,我们有可能会碰到从系统中导出数据并打印的需要,打印的格式是常规的表格形式,例如: 本文记录使用js库html2canvas + jspdf实现html转PDF.图片,并下载 画出页面 ...

随机推荐

  1. shell定义

    用户输入的命令并且把它们送到内核.不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序. Shell编程语言具有普通编程语言的很多特点 无图形化界面时与lin ...

  2. mosquitto订阅发布参数详解

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. Python学习笔记:数据的处理

    上次的学习中有个split函数,照着head first Python上敲一遍代码: >>> with open('james.txt') as jaf: data=jaf.read ...

  4. 【数据算法】Java实现二叉树存储以及遍历

    二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作. 步骤就是原数据:数组 节点化数据:定义 Node节点对象 存储节点对象:通过Linke ...

  5. leetcode-easy-dynamic-198 House Robber-NO

    mycode 思路: a:1 2 3 4 5 6 7 8 9 f(9) =max( f(7) + a9 ,f(8)) 前一步.前两步 至于前三步 f(9) = f(6)+ a9,但其实f(7)在求值的 ...

  6. c++中字符输入函数cin.getline在输入char与string时的不同

    cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...

  7. foundation DB问题

    1. go get github.com/apple/foundationdb/bindings/go/src/fdb # github.com/apple/foundationdb/bindings ...

  8. Java学习笔记之Iterator和ListIterator

    原文:https://blog.csdn.net/GongchuangSu/article/details/51514380 Iterator接口是对collection进行迭代的迭代器,ListIt ...

  9. java:Mybatis框架2(基于mapper接口的开发,多种查询,复合类型查询,resultMap定义,多表联查,sql片段)

    1.mybatis02: mybatis-config.xml: <?xml version="1.0" encoding="UTF-8"?> &l ...

  10. springboot mybatis下临时表的创建和删除,可用于查重去重

    /** * 创建临时表 */ @Update({"drop temporary table if exists ${tableName};", "create tempo ...