# 文档预览功能使用指南

## 功能概述

知识库系统现在支持在线预览 Word 文档（.doc 和 .docx 格式）。用户可以在文档查看页面直接查看文档内容，无需下载。

## 技术实现

### 核心组件

1. **DocumentPreviewService** (`app/Services/DocumentPreviewService.php`)
   - 负责将 Word 文档转换为 HTML 格式
   - 使用 PHPWord 库进行文档解析
   - 提供文档预览能力检查

2. **ViewDocument 页面** (`app/Filament/Resources/DocumentResource/Pages/ViewDocument.php`)
   - 使用 Filament Infolist 显示文档信息
   - 集成文档预览组件
   - 提供下载按钮

3. **预览视图** (`resources/views/filament/resources/document/preview.blade.php`)
   - 渲染文档预览 HTML
   - 处理错误和不支持的格式
   - 提供友好的用户界面

### 依赖库

- **phpoffice/phpword**: 用于读取和转换 Word 文档

## 功能特性

### 1. 文档信息展示

在查看页面顶部显示：
- 文档标题
- 文档描述
- 文档类型（全局/专用知识库）
- 所属分组（专用文档）
- 上传者
- 文件名
- 文件大小
- 上传时间
- 更新时间

### 2. 文档预览

- **支持格式**: .doc, .docx
- **预览内容**: 
  - 文本内容
  - 基本格式（标题、段落、列表等）
  - 表格
  - 图片（如果有）
- **最大高度**: 600px，超出部分可滚动查看

### 3. 错误处理

系统会优雅地处理以下情况：
- 文档文件不存在
- 文档格式不支持预览
- 文档转换失败

### 4. 下载功能

- 在页面顶部提供"下载文档"按钮
- 自动记录下载日志
- 验证用户权限

## 使用方法

### 查看文档

1. 登录系统
2. 进入"文档管理"
3. 点击任意文档的"查看"按钮
4. 系统会自动显示文档信息和预览

### 下载文档

1. 在文档查看页面
2. 点击顶部的"下载文档"按钮
3. 文档会自动下载到本地

## API 方法

### DocumentPreviewService

```php
// 检查文档是否可以预览
$canPreview = $previewService->canPreview($document);

// 将文档转换为 HTML
$htmlContent = $previewService->convertToHtml($document);

// 提取文档纯文本（用于搜索等）
$text = $previewService->extractText($document);
```

## 性能考虑

1. **首次加载**: 文档转换可能需要几秒钟，取决于文档大小和复杂度
2. **缓存**: 目前未实现缓存，每次查看都会重新转换
3. **大文件**: 建议对大文件（>10MB）提示用户下载查看

## 未来改进

1. **缓存机制**: 缓存转换后的 HTML，提高加载速度
2. **更多格式**: 支持 PDF、Excel 等格式
3. **全文搜索**: 利用提取的文本内容实现全文搜索
4. **在线编辑**: 支持在线编辑文档内容
5. **版本控制**: 支持文档版本管理

## 故障排除

### 预览失败

如果预览失败，可能的原因：
1. 文档文件损坏
2. 文档格式不标准
3. PHPWord 库不支持某些特殊格式

解决方法：
- 检查文档是否可以在本地打开
- 尝试重新上传文档
- 使用下载功能获取原始文档

### 格式显示异常

预览版本可能与原始格式略有差异，这是正常现象。如需查看完整格式，请下载文档。

## 安全考虑

1. **权限验证**: 只有有权限的用户才能查看文档
2. **文件隔离**: 文档存储在私有目录，不能直接访问
3. **XSS 防护**: HTML 内容经过清理，防止 XSS 攻击

## 测试

运行测试：
```bash
php artisan test --filter=DocumentPreviewServiceTest
```

测试覆盖：
- 文档格式检查
- 文档不存在时的错误处理
- HTML 转换功能
