将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)

ops/2024/12/18 19:50:40/

将PDF流转为图片展示在页面上

使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上,然后将 canvas 转为图片

pdfjsdist___4">安装 pdfjs-dist 依赖

npm install pdfjs-dist
或者
yarn add pdfjs-dist

创建一个组件来处理 PDF 流的加载和渲染

该组件中是一个包含 PDF 文件的 ArrayBuffer 或者 Uint8Array。
pdf 流传入该组件中使用

javascript">/** @format */import React, { useState, useEffect } from 'react';
// import { pdfjs } from 'pdfjs-dist';
var pdfjs = require('pdfjs-dist/es5/build/pdf.js');
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`;const PdfToImage = ({ pdfData }) => {const [imageSrc, setImageSrc] = useState(null);const base64ToArrayBuffer = (base64) => {var binary_string = window.atob(base64);var len = binary_string.length;var bytes = new Uint8Array(len);for (var i = 0; i < len; i++) {bytes[i] = binary_string.charCodeAt(i);}return bytes.buffer;};useEffect(() => {const renderPDF = async (arrayBuffer) => {const loadingTask = pdfjs.getDocument({ data: arrayBuffer });try {const pdf = await loadingTask.promise;const page = await pdf.getPage(1); // 获取第一页const viewport = page.getViewport({ scale: 1.5 }); // 设置缩放比例const canvas = document.createElement('canvas');const canvasContext = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;const renderContext = {canvasContext,viewport,};await page.render(renderContext).promise;// 将canvas内容转换为图片const imageSrc = canvas.toDataURL('image/png');setImageSrc(imageSrc);} catch (error) {console.error('Error rendering PDF:', error);}};// 首先将base64的PDF流转为ArrayBufferlet arrayBuffer = base64ToArrayBuffer(pdfData);// 然后将ArrayBuffer格式的数据转为图片renderPDF(arrayBuffer);}, [pdfData]);return <div>{imageSrc && <img src={imageSrc} alt="PDF as image" />}</div>;
};export default PdfToImage;

使用示例

这里的PDF_content 也可以直接使用 ArrayBuffer 或者 Uint8Array 的格式,直接传入组件,将组件中的 base64ToArrayBuffer 方法不使用即可。

javascript">import React from 'react';
import PdfToImage from './PdfToImage.jsx';render() {const PDF_content = 'XXXX....BYFhEdCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4cmVmCjg2NTkxCiUlRU9GCg=='// base64 格式return (<PdfToImage  pdfData={PDF_content}></PdfToImage>)}

http://www.ppmy.cn/ops/142989.html

相关文章

C# 开发探索与实践 第一个C#程序

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

C#速成(GID+图形编程)

常用类 类说明Brush填充图形形状,画刷GraphicsGDI绘图画面&#xff0c;无法继承Pen定义绘制的对象直线等&#xff08;颜色&#xff0c;粗细&#xff09;Font定义文本格式&#xff08;字体&#xff0c;字号&#xff09; 常用结构 结构说明Color颜色Point在平面中定义点Rectan…

SpringCloud 集成 Eureka服务,本机测试

Eureka是一款开源的服务注册与发现组件&#xff0c;分EurekaServer和EurekaClient。 Eureka作用过程&#xff1a; Eureka Client&#xff08;服务提供者&#xff09;启动向Eureka Server&#xff08;http-api&#xff09;注册,另一个Eureka Client&#xff08;服务消费者&#…

Node.js 文件系统

Node.js 的文件系统模块&#xff08;fs 模块&#xff09;提供了丰富的 API&#xff0c;用于读取、写入、删除文件以及执行其他文件系统操作。 fs 模块既支持同步方法也支持异步方法&#xff0c;使得开发者可以根据具体需求选择合适的方式来处理文件操作。 导入 fs 模块 首先…

在centos 7.9上面安装mingw交叉编译工具

1.说明 为了在centos上面编译windows的程序&#xff0c;需要安装mingw工具&#xff0c;mingw工具是可以编译windows程序的一些工具链&#xff0c;使用方式和linux一致 2.下载脚本 使用脚本方式编译&#xff0c;github的脚本位置&#xff1a;https://github.com/Zeranoe/ming…

Roslyn 是什么?

Roslyn 是什么&#xff1f; Roslyn 是 .NET 平台的开源编译器平台&#xff0c;支持 C# 和 Visual Basic (VB) 两种编程语言。它不仅是一个传统的编译器&#xff0c;还提供了丰富的 API&#xff0c;供开发者对代码进行分析、生成、重构等操作。其全名为 “.NET Compiler Platfo…

DeepSeek-V2的多头潜在注意力机制及其在开源Mixture-of-Experts (MoE)语言模型中的应用

DeepSeek-V2的多头潜在注意力机制及其在开源Mixture-of-Experts (MoE)语言模型中的应用 DeepSeek-V2的架构及其优势 DeepSeek-V2的架构及其优势可以从几个关键方面进行深入探讨&#xff1a; 1. 架构设计 DeepSeek-V2是一个基于Mixture-of-Experts&#xff08;MoE&#xff0…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…