react项目中预览pdf文件
最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js
//安装 "pdfjs-dist": "2.0.402" //引入 import * as pdfjs from 'pdfjs-dist' import * as pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry' // 定义初始值 let pdfDoc = null;
const [pdfParams, setPdfParams] = useState({
pageNumber: 1, // 当前页
total: 0,// 总页数
});
// 预览pdf文档的地址 let pdfUrl = 'https://c.alisports.com/xxxxx/test.pdf' // 加载 useEffect(() => { loadPdfFile(pdfUrl); }, [pdfUrl]); // 初始化 const loadPdfFile = (pdfUrl) => { pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker ; let url = pdfUrl ; pdfjs.getDocument(url).promise.then(async (doc) => { pdfDoc = doc getPdfPage(1) setPdfParams(s => ({ ...s, total: doc.numPages })) }) } //加载页数 const getPdfPage = (number) => { pdfDoc.getPage(number).then(page => { const viewport = page.getViewport() const canvas = document.getElementById('pdf-render') const context = canvas.getContext('2d') canvas.width = viewport.viewBox[2] canvas.height = viewport.viewBox[3] viewport.width = viewport.viewBox[2] viewport.height = viewport.viewBox[3] canvas.style.width = viewport.width // viewport.width为pdf文件的实际宽度 canvas.style.height = viewport.height // viewport.height为pdf文件的实际高度 let renderContext = { canvasContext: context, viewport: viewport, // 这里transform的六个参数,使用的是transform中的Matrix(矩阵) transform: [1, 0, 0, -1, 0, viewport.height] // 默认填这个就好了 } // 进行渲染 page.render(renderContext) }) } // dom结构 <canvas id="pdf-render" ></canvas>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App