解决PDF.js转Canvas图片,toDataURL空白问题 #90

简介: 解决PDF.js转Canvas图片,toDataURL空白问题 #90

起因


最近,笔者接到一个需求,需要在前端把PDF转成图片,再把图片转成Base64,传给小程序。然后发现,只有PDF.js这个库,才能满足我们的需求。


核心代码


renderPage(url) {
    return new Promise((resolve, reject) => {
        const loadingTask = pdfjsLib.getDocument(url);
        loadingTask.promise.then((pdf) => {
            const pages = pdf.numPages;
            // 添加canvas, 根据pdf的页数添加
            for (let i = 1; i <= pages; i++) {
                const canvas = document.createElement('canvas');
                const showPdf = document.getElementById('show-pdf');
                canvas.setAttribute('id', 'canvas' + i.toString());
                showPdf.appendChild(canvas);
            }
            let count = 0;
            for (let i = 1; i <= pages; i++) {
                pdf.getPage(i).then((page) => {
                    const viewport = page.getViewport({ scale: 1.5 });
                    const canvas = document.getElementById(('canvas' + i).toString());
                    const context = canvas.getContext('2d');
                    canvas.height = viewport.height;
                    canvas.width = viewport.width;
                    const renderContext = {
                        canvasContext: context,
                        viewport: viewport
                    };
                    page.render(renderContext)
                });
            }
        });
    });
}
// 推送
push(record) {
    this.renderPage(record.url).then(() => {
        const canvas = document.querySelectorAll('#show-pdf > canvas');
        let datas = [];
        for(let i = 0; i < canvas.length; i++) {
            datas.push(canvas[i].toDataURL("image/png"));
        }
    });
}

这段代码写完之后,调试,发现获取出来的Base64,无法还原图片。才疏学浅,死活找不到原因。找了好久,终于看到一篇文章,要看全文,还得关注公众号,获取二维码解锁。emmm,然后,我就解锁了。看到最最关键的两行代码,抱着试试的心态,写上。

居然成功了!!!

然后,反思我的代码哪里不对,几次尝试之后,找到问题了,page.render 绘制有延迟。。。把page.render代码修改如下。

page.render(renderContext).promise.then(() => {
    count++;
    // 已全部完成绘制
    if(count == pages) {
        resolve();
    }
});

大功告成,完美解决。

目录
打赏
0
0
0
0
1
分享
相关文章
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
130 8
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
180 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
【Html.js——图片折叠效果】折叠手风琴(蓝桥杯真题-1763)【合集】
本项目实现了一个图片折叠手风琴效果,使用jQuery完成。主要包括以下部分: - **介绍**:任务是通过点击图片实现折叠和展开的效果。 - **准备**:内置初始代码,包含 `css/style.css`、`images/` 文件夹、`js/` 文件夹及 `index.html` 等文件。启动 Web Server 服务可运行项目。 - **目标**:完善 `index.js` 文件,使页面达到预期的折叠效果。 - **规定**:严格按步骤操作,保持默认文件结构不变,并在完成后保持 Web 服务正常访问状态。 - **通关代码**:使用 jQuery 实现点击事件,为选中元素添加 `act
51 19
|
7月前
|
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
362 0
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
使用 JavaScript 实现图片上传
使用 JavaScript 实现图片上传
151 1
|
3月前
|
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
102 16
用PDF转换图片的方式弥补通义千问在扫描版PDF支持方面的缺失
当前通义千问Web版和本地版qwen-VL在处理扫描版PDF时均无法直接识别,导致实际应用中处理大量扫描PDF的需求难以满足。为此,通过使用Python的pdf2image库,可将PDF文件转换为图片,再进行OCR处理,实现解决方案。文中提供了具体的代码示例,展示了如何将PDF文件的每一页转换成图片,并保存至指定文件夹,为后续的OCR处理做好准备。
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
133 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等