import { useEffect, useState } from "react"; import mammoth from "mammoth"; interface WordViewerProps { /** Word 文档的路径 */ docPath: string; /** 容器的类名 */ className?: string; } export const WordViewer = ({ docPath, className = "" }: WordViewerProps) => { const [htmlContent, setHtmlContent] = useState(""); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); useEffect(() => { const loadDocument = async () => { try { setLoading(true); setError(""); // 获取 Word 文档 const response = await fetch(docPath); if (!response.ok) { throw new Error("无法加载文档"); } // 转换为 ArrayBuffer const arrayBuffer = await response.arrayBuffer(); // 使用 mammoth 转换为 HTML const result = await mammoth.convertToHtml({ arrayBuffer: arrayBuffer, }); setHtmlContent(result.value); // 如果有警告信息,可以在控制台输出 if (result.messages.length > 0) { console.warn("文档转换警告:", result.messages); } } catch (err) { console.error("加载文档失败:", err); setError(err instanceof Error ? err.message : "加载文档失败"); } finally { setLoading(false); } }; loadDocument(); }, [docPath]); if (loading) { return (
加载中...
); } if (error) { return (
加载失败: {error}
); } return (
{/* 头部工具栏 */} {/*

工作室活动文稿

下载文档
*/} {/* 文档内容区域 custom-scrollbar*/}
{/* 内联样式 - 美化文档内容 */}
); };