import { useState, useMemo } from 'react' import { Document, Page, pdfjs } from 'react-pdf' import { Button, Space, InputNumber, message, Spin } from 'antd' import { LeftOutlined, RightOutlined, ZoomInOutlined, ZoomOutOutlined, } from '@ant-design/icons' import 'react-pdf/dist/Page/AnnotationLayer.css' import 'react-pdf/dist/Page/TextLayer.css' import './PDFViewer.css' // 配置 PDF.js worker - 使用本地文件 pdfjs.GlobalWorkerOptions.workerSrc = '/pdf-worker/pdf.worker.min.mjs' function PDFViewer({ url, filename }) { const [numPages, setNumPages] = useState(null) const [pageNumber, setPageNumber] = useState(1) const [scale, setScale] = useState(1.0) // 使用 useMemo 避免不必要的重新加载 const fileConfig = useMemo(() => ({ url }), [url]) const onDocumentLoadSuccess = ({ numPages }) => { setNumPages(numPages) setPageNumber(1) } const onDocumentLoadError = (error) => { message.error('PDF文件加载失败') } const goToPrevPage = () => { setPageNumber((prev) => Math.max(prev - 1, 1)) } const goToNextPage = () => { setPageNumber((prev) => Math.min(prev + 1, numPages)) } const zoomIn = () => { setScale((prev) => Math.min(prev + 0.2, 3.0)) } const zoomOut = () => { setScale((prev) => Math.max(prev - 0.2, 0.5)) } const handlePageChange = (value) => { if (value >= 1 && value <= numPages) { setPageNumber(value) } } return (