当前位置: 首页 > news >正文

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

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

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

安装 pdfjs-dist 依赖

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

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

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

/** @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 方法不使用即可。

import React from 'react';
import PdfToImage from './PdfToImage.jsx';render() {const PDF_content = 'XXXX....BYFhEdCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4cmVmCjg2NTkxCiUlRU9GCg=='// base64 格式return (<PdfToImage  pdfData={PDF_content}></PdfToImage>)}
http://www.lryc.cn/news/504313.html

相关文章:

  • 【深度学习】 零基础介绍卷积神经网络(CNN)
  • Coze概述
  • 康佳Android面试题及参考答案(多张原理图)
  • 2022 年 3 月青少年软编等考 C 语言四级真题解析
  • 关于24年408真题的疑问
  • 【容器】k8s学习笔记基础部分(三万字超详细)
  • dayjs(2kb)和momentjs(70kb)关系详述及项目中如何选择讲解
  • 【Python网络爬虫笔记】11- Xpath精准定位元素
  • 6.python列表
  • Android中bindService和startService启动服务有何区别
  • 超牛免费 机械臂模型、工业机器人模型下载网站集合
  • 引领未来的变革:15种前沿RAG技术及其应用探索
  • Scala泛型应用场景
  • AI监控赋能健身馆与游泳馆全方位守护,提升安全效率
  • Avalonia实战实例二:添加三种状态的Svg图片按钮
  • 基于注意力的几何感知的深度学习对接模型 GAABind - 评测
  • arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)
  • Color-Light-Control-and-Four-Way-Responder based on STM32F103C8T6
  • openGauss开源数据库实战二十八
  • Vue3之响应式系统详解
  • Kafka 的配置文件
  • 【系统思辨】分散注意
  • 单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。
  • Python课设-谁为影狂-豆瓣数据【数据获取与预处理课设】
  • 关卡选择与布局器
  • 评估一套呼叫中心大模型呼出机器人的投入回报比?
  • 面向对象的 CLI:使用 Fire 简化类和对象的方法暴露 (中英双语)
  • flutter控件buildDragTargetWidget详解
  • 使用webrtc-streamer查看实时监控
  • 【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)