pdf文件渲染到canvas

server/2024/10/9 17:27:51/

1、jQuery
2、Fabric.js
Fabric.js是一个对canvas进行封装的Javascript库,主要的功能包括在canvas上创建和填充图形,比如矩形、圆形、多边形;生成的图像自带缩放、旋转、拖拽等功能。
3、PDF.js
PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。
在这里插入图片描述

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script type="text/javascript" src="js/jquery-3.4.1.js"></script><script type="text/javascript" src="js/fabric.min.js"></script><script type="text/javascript" src="js/pdf.min.js"></script><script type="text/javascript" src="js/pdf.worker.min.js"></script></head><body><div><input id="fileInput" type="file" accept="application/pdf,image/jpeg,image/png"/></div><canvas id="canvas" width="500" height="620" style="border: 1px solid #000;"></canvas></body><script type="text/javascript">var currentSrc; // 图片srccanvas = new fabric.Canvas('canvas', {backgroundColor: '#fff'})$('#fileInput').change(function(event) {var file = event.target.files[0]; // 获取文件对象if(file&&file.type=='image/jpeg' || file.type=='image/png'){console.log('图',file)var reader = new FileReader();reader.onload = function(e) {// 处理读取结果currentSrc = e.target.result;createImg(100,100)console.log('currentSrc',currentSrc);};reader.readAsDataURL(file); // 正确使用文件对象调用方法}else if(file.type=='application/pdf'){console.log('file',file,)new Promise((resolve, reject) => {let reader = new FileReader()reader.onloadend = function(e) { //读取完成触发,无论失败还是成功resolve(e.target.result) //base64格式}reader.readAsDataURL(event.target.files[0])}).then(resolve => {// 读取多张pdfToImage(resolve)})}});// 多张async function pdfToImage(pdfUrl) {(await importPdfToFabric(pdfUrl)).map(async c => {// console.log('c------',c);const fabricImage = new fabric.Image(await c, {top:50,left:30,scaleX: 0.45,scaleY: 0.45});// canvas.clear();	canvas.add(fabricImage);console.log('文件存储',canvas.toJSON())// console.log('cccc',JSON.stringify(canvas))})};async function importPdfToFabric(pdfUrl) {var loadingTask = pdfjsLib.getDocument(pdfUrl);return await loadingTask.promise.then(  async (pdf) => {const numPages = pdf.numPages;let nar = new Array(numPages).fill(0);for(var ii=1;ii<=numPages;ii++){nar[ii-1] = await pdfgetPage(ii,pdf)}return nar;});}async function pdfgetPage(pageNumber,pdf) {let rss;await pdf.getPage(pageNumber).then((page) => {// console.log('page',page,pageNumber);const viewport = page.getViewport({ scale: window.devicePixelRatio });const canvas1 = document.createElement('canvas');const context = canvas1.getContext('2d');canvas1.height = viewport.height; // 1330canvas1.width = viewport.width; // 930const renderContext = {canvasContext: context,viewport: viewport};const renderTask = page.render(renderContext);rss = renderTask.promise.then(() => canvas1);});return rss;};// 绘制图片function createImg(top, left) {var img = document.createElement("img");img.onload = function () {var canvasImage = new fabric.Image(img,  {top : top,left : left,angle: 0,opacity: 1,scaleX: 0.1,scaleY: 0.1})canvas.add(canvasImage)// console.log('canvas toJSON', canvas.toJSON(),canvasImage)}img.crossOrigin = 'Anonymous'; img.src = currentSrc;};</script>
</html>

http://www.ppmy.cn/server/106614.html

相关文章

ATR - LSIs supported BIT

6.3.3 Global Interface bytes ts_102221v170400p.pdf

Python包管理工具pip:新手必备命令速查手册

pip 是 Python 的包安装程序&#xff0c;用于从 Python Package Index (PyPI) 安装和管理包。pip 提供了一系列命令来与 Python 包进行交互。以下是一些最常用的 pip 命令及其用法&#xff1a; 安装包 pip install package_name或者&#xff0c;如果你需要指定包的版本&#xf…

Python异步库asyncio、aiohttp详解例子解析

Python 的 asyncio 库是用于编写单线程并发代码的&#xff0c;它使用 async 和 await 语法来定义和管理协程。asyncio 通过事件循环来管理所有的协程&#xff0c;使得在等待IO操作完成时&#xff0c;可以执行其他任务&#xff0c;从而提高程序的效率。例如&#xff0c;使用 asy…

CSS;笔记分享;知识回顾

一&#xff0c;引入 CSS名字&#xff1a; CSS&#xff1a;cascading style sheets (层叠样式表) 层叠&#xff1a;样式的叠加 样式表&#xff1a;各种各样样式的集合 HTML和CSS的关系: 先有HTML&#xff0c;先有页面&#xff0c;修饰页面-->CSS 作…

【Tomcat】Tomcat10部署war包无法启动

文章目录 问题原因解决 问题 从Tomcat 9升级到Tomcat 10后&#xff0c;访问部署的War报404&#xff0c;查看日志是War启动不起来。 原因 Apache Tomcat 10.0.5 开始默认的是 Jakarta EE 规范&#xff0c;而 Tomcat 9 和更早的版本默认是可以处理 Java EE 规范。因此&#xf…

OpenCV几何图像变换(11)极坐标转换函数warpPolar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数将图像重映射到极坐标或半对数极坐标空间。 极坐标重映射参考 用以下转换来转换源图像&#xff1a; d s t ( ρ , ϕ ) s r c ( x , y ) ds…

Stable Diffusion的微调方法原理总结

在深度学习领域&#xff0c;Stable Diffusion作为一种强大的生成模型&#xff0c;正逐渐成为图像和视频生成领域的热门话题。它不仅能够模拟复杂的自然和人工系统中的随机演化行为&#xff0c;还通过一系列微调方法&#xff0c;显著提升了模型在特定任务上的性能。本文旨在深入…

Spring MVC学习路线指南

学习 Spring MVC 是构建 Java Web 应用程序的关键步骤。以下是一个系统化的学习指南&#xff0c;帮助你从基础到进阶地掌握 Spring MVC。 **1. 基础知识 a. 环境准备 Java JDK&#xff1a;确保你已安装 Java Development Kit (JDK)。IDE&#xff1a;推荐使用 IntelliJ IDEA、…