PDF转图片 + 分页

这篇具有很好参考价值的文章主要介绍了PDF转图片 + 分页。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PDF转图片 有两种方式,一种是请求所有分页后合成一张图片,一种是分页加载
本文推荐后者,前者在实操中 pdf页码过大时 转换超时导致失败

本文需要的依赖是pdf.js pdf.worker.js jquery.js 当然在git上都可以找到

也可以使用本文上传的资源依赖,在这篇文章的上方下载。文章来源地址https://www.toymoban.com/news/detail-588987.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1,user-scalable=no" />
    <title>PDF文件转图片</title>
    <script src="/assets/js/jquery.js"></script>
    <script src="/assets/v2/js/pdf.js"></script>
    <script src="/assets/v2/js/pdf.worker.js"></script>
</head>

<body>
    <div class="all_cont" style=" display: flex;flex-direction: column;align-items: center;">
        <div class="container_cont" style="margin-top:1%;position: relative;display: flex;align-items: center;justify-content: center;">
            <button id="prevpage" style=" width: 120px;height: 30px;background: none;border: 1px solid #b1afaf;border-radius: 5px;font-size: 12px;font-weight: 1000;color: #384240;cursor: pointer;outline: none;margin: 0 0.5%">上一页</button>
            <button id="nextpage" style=" width: 120px;height: 30px;background: none;border: 1px solid #b1afaf;border-radius: 5px;font-size: 12px;font-weight: 1000;color: #384240;cursor: pointer;outline: none; margin: 0 0.5%">下一页</button>
            <input style="display:none" id="chooseFile" type="file" accept="application/pdf">
        </div>
        <div class="container_cont">
            <div id="container" style=" margin-top: 1%;border-radius: 2px;border: 2px solid #a29b9b;"></div>
            <img id="imgloading" style="position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%); display:none" src="/assets/images/loading.gif">
        </div>
    </div>
</body>
<script>
    var currentPages, totalPages //声明一个当前页码及总页数变量
    var url = '/media/files/db01a18eaeb9f87ca49b22bcb61f2dc17ecd72d4.pdf';
    var my_pdf = '';

    function init() {
        loadPdfFromUrl(url);
    }

    function loadPdfFromUrl() {
        $('#imgloading').css('display', 'block');
        $('#container').empty(); //清空上一PDF文件展示图
        currentPages = 1; //重置当前页数
        totalPages = 0; //重置总页数
        pdfjsLib.getDocument(url).promise.then(function(pdf) { //调用pdf.js获取文件
            console.log('gl----pdf', pdf);
            my_pdf = pdf
            if (pdf) {
                totalPages = pdf.numPages; //获取pdf文件总页数
                $('#currentPages').text('1/');
                $('#totalPages').text(totalPages);
                //遍历动态创建canvas
                for (var i = 1; i <= totalPages; i++) {
                    var canvas = document.createElement('canvas');
                    canvas.id = 'pageNum' + i;
                    $('#container').append(canvas);
                    var context = canvas.getContext('2d');
                    renderImg(pdf, i, context);
                }
            }
        });
    }

    function renderImg(pdfFile, pageNumber, canvasContext) {
        console.log('gl---pdfFile', pdfFile);
        pdfFile.getPage(pageNumber).then(function(page) { //逐页解析PDF
            var viewport = page.getViewport({
                scale: 1
            }); // 页面缩放比例
            var newcanvas = canvasContext.canvas;
            //设置canvas真实宽高
            newcanvas.width = viewport.width;
            newcanvas.height = viewport.height;
            //设置canvas在浏览中宽高
            newcanvas.style.width = '100%';
            newcanvas.style.height = '100%';
            //默认显示第一页,其他页隐藏
            if (pageNumber != 1) {
                newcanvas.style.display = 'none';
            }
            var renderContext = {
                canvasContext: canvasContext,
                viewport: viewport
            };
            page.render(renderContext); //渲染生成
        });
        $('#imgloading').css('display', 'none');
        return;
    };
    $('#prevpage').click(function() {
        if (!currentPages || currentPages <= 1) {
            return;
        }
        nowpage = currentPages;
        currentPages--;
        $('#currentPages').text(currentPages + '/');
        var prevcanvas = document.getElementById('pageNum' + currentPages);
        var currentcanvas = document.getElementById('pageNum' + nowpage);
        currentcanvas.style.display = 'none';
        prevcanvas.style.display = 'block';
    })
    $('#nextpage').click(function() {
        if (!currentPages || currentPages >= totalPages) {
            return;
        }
        nowpage = currentPages;
        currentPages++;
        $('#currentPages').text(currentPages + '/');
        var nextcanvas = document.getElementById('pageNum' + currentPages);
        var currentcanvas = document.getElementById('pageNum' + nowpage);
        currentcanvas.style.display = 'none';
        nextcanvas.style.display = 'block';
    })
    init()
</script>

</html>

到了这里,关于PDF转图片 + 分页的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端实现文件预览(pdf、excel、word、图片)

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 sandbox 这个属性如果是单纯预览图片可以不使用,该属性对呈现在 iframe 框架中的内容

    2024年02月10日
    浏览(59)
  • 记录--前端实现文件预览(pdf、excel、word、图片)

    需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 iframe标签能够将另一个HTML页面嵌入到当前页面中,我们的图片也能够使用iframe标签来

    2024年02月09日
    浏览(63)
  • 【itext7】itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格

    这篇文章,主要介绍itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格。 目录 一、itext7操作PDF内容 1.1、添加段落文本内容 1.2、添加列表内容 1.3、添加图片 1.4、添加表格 (1)列宽采用点单位(pt点单位) (2)采用百分比单位(%百分比) it

    2024年02月16日
    浏览(49)
  • pdf、pfd、img互转工具类

    2024年02月13日
    浏览(20)
  • JRT监听-PDF-Excel-Img

    依赖全新设计,我们无需再顾虑历史兼容性的束缚;同时,基于多年来累积的深入需求理解,JRT监听机制巧妙地借助CMD命令模式,达成了监听的全面统一。无论是PDF、Excel还是图片文件,都不再需要特殊对待或额外区分处理,它们与txt文件的监听一样简洁高效。业务保存方法

    2024年02月19日
    浏览(17)
  • 后端返回二进制流,前端处理二进制文件流,实现预览图片以及PDF

    1、首先预览PDF需要 后端 将响应头 Content-Type 设置为PDF类型 application/pdf ,不能预览,会直接下载 2、 前端 定义接口:并设置相应类型 responseType 为 blob 请求数据:通过 window.URL.createObjectURL(res) 转成本地预览地址, 在通过 window.open() 方法打开转成本地预览地址即可预览PDF,如下

    2024年02月15日
    浏览(55)
  • 高亮img、pdf重点部分(html2canvas、pdfjs-dist、react-pdf)

    报销单据审批中,高亮发票部分 后台返回 一张图片或者pdf 、返回 一组坐标 ,坐标类型 [number,number,number,number] ,分别代表了x、y、width、height。需要根据坐标在图片上高亮出来坐标位置。如下图 高亮的坐标是: dom转成图片:html2canvas pdf预览:pdfjs-dist、react-pdf 遮照:纯css实

    2024年02月10日
    浏览(42)
  • 前端生成pdf之html2canvas+jsPDF,以及解决图片不显示bug

    开发背景: 需要给页面中相应的内容生成pdf,查找文档后发现要用到两个插件。html2canvas 以及 jsPDF html2canvas 给dom结构转化为canvas,然后生成各种类型图片 jsPDF 把canvas 生成的图片url 转化为pdf 参数 image:表示要插入的图片资源,可以是图片文件的路径或者base64编码字符串。

    2024年02月02日
    浏览(52)
  • 【代码片】Pdf转Image

    适用场景:接口交互传输文件

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包