Files
suanming/docs/FRONTEND_EXPORT_SETUP.md
patdelphi 865d4c7a15 feat: Enhanced lunar calendar display and Zi Shi calculation improvements
- Added full Chinese year display (农历一九七六年)
- Implemented detailed solar term intervals (惊蛰后至春分前)
- Enhanced Zi Shi calculation with professional explanations
- Added lunar information display in frontend components
- Improved accuracy of lunar date calculations
- Removed redundant note texts for cleaner UI
- Fixed syntax errors in analyzer modules
2025-08-23 10:26:51 +08:00

211 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 前端页面导出功能设置说明
## 功能概述
新增了前端页面直接导出为PDF和PNG的功能用户可以直接从分析结果页面生成
- **PDF文档**:支持分页的专业格式文档
- **PNG长图**:完整页面截图,适合社交媒体分享
## 依赖安装
需要安装以下依赖包:
```bash
npm install html2canvas jspdf
```
或使用yarn
```bash
yarn add html2canvas jspdf
```
## 功能特性
### PDF导出
- ✅ A4纸张格式
- ✅ 自动分页处理
- ✅ 高质量输出
- ✅ 保持原有样式和布局
- ✅ 自动隐藏导出按钮等UI元素
### PNG导出
- ✅ 高分辨率长图2倍缩放
- ✅ 完整页面内容
- ✅ 保持颜色和样式
- ✅ 适合移动端查看和分享
## 已集成的组件
1. **CompleteYijingAnalysis** - 易经占卜分析页面
2. **CompleteBaziAnalysis** - 八字命理分析页面
3. **CompleteZiweiAnalysis** - 紫微斗数分析页面
## 使用方法
### 在组件中使用
```tsx
import PageExportButton from './ui/PageExportButton';
// 在JSX中使用
<PageExportButton
targetElementId="analysis-content" // 要导出的元素ID
fileName="分析结果" // 文件名前缀
title="页面导出" // 按钮显示文本
className="sticky top-4 z-10" // 样式类名
/>
```
### 标记导出内容
为要导出的内容容器添加ID和data属性
```tsx
<div id="analysis-content" data-export-content>
{/* 要导出的内容 */}
</div>
```
### 隐藏不需要导出的元素
为不需要出现在导出文件中的元素添加类名或属性:
```tsx
<div className="no-export" data-no-export>
{/* 下载按钮等UI元素 */}
</div>
```
## 技术实现
### 核心技术栈
- **html2canvas**: 将DOM元素转换为Canvas
- **jsPDF**: 生成PDF文档
- **React**: 组件化开发
- **TypeScript**: 类型安全
### 导出流程
1. **获取目标元素**: 根据ID或选择器定位要导出的DOM元素
2. **生成Canvas**: 使用html2canvas将DOM转换为高质量Canvas
3. **处理样式**: 自动处理CSS样式、字体、图片等
4. **生成文件**:
- PNG: 直接从Canvas生成图片
- PDF: 将Canvas图片嵌入PDF文档支持分页
5. **自动下载**: 创建下载链接并触发下载
### 配置选项
```typescript
// html2canvas配置
{
scale: 2, // 提高分辨率
useCORS: true, // 支持跨域图片
allowTaint: true, // 允许跨域内容
backgroundColor: '#ffffff', // 背景色
onclone: (clonedDoc) => {
// 在克隆文档中隐藏不需要的元素
}
}
// jsPDF配置
{
orientation: 'portrait', // 纵向
unit: 'mm', // 单位毫米
format: 'a4' // A4格式
}
```
## 样式优化
### CSS类名约定
- `.no-export`: 不导出的元素
- `[data-no-export]`: 不导出的元素(属性方式)
- `[data-export-content]`: 主要导出内容
- `.fixed`, `.sticky`, `.floating`: 自动隐藏的浮动元素
### 打印样式优化
可以添加打印专用样式:
```css
@media print {
.no-print {
display: none !important;
}
.print-break {
page-break-before: always;
}
}
```
## 错误处理
- ✅ 网络错误处理
- ✅ 图片加载失败处理
- ✅ 浏览器兼容性检查
- ✅ 用户友好的错误提示
- ✅ Toast通知集成
## 浏览器兼容性
- ✅ Chrome 60+
- ✅ Firefox 55+
- ✅ Safari 12+
- ✅ Edge 79+
- ⚠️ IE不支持需要polyfill
## 性能优化
- 🚀 按需加载依赖
- 🚀 Canvas复用
- 🚀 内存管理
- 🚀 大文件分块处理
- 🚀 用户体验优化(加载状态、进度提示)
## 未来扩展
- [ ] 支持更多导出格式DOCX、Excel等
- [ ] 批量导出功能
- [ ] 云端存储集成
- [ ] 自定义模板支持
- [ ] 水印和签名功能
## 注意事项
1. **图片跨域**: 确保所有图片资源支持CORS
2. **字体加载**: 确保自定义字体已完全加载
3. **内容大小**: 超大内容可能影响性能
4. **移动端**: 在移动设备上可能需要额外优化
5. **隐私**: 导出功能完全在客户端执行,不会上传数据
## 故障排除
### 常见问题
1. **图片不显示**: 检查图片CORS设置
2. **样式丢失**: 确保CSS已完全加载
3. **字体异常**: 检查字体文件加载状态
4. **内容截断**: 调整Canvas尺寸设置
5. **下载失败**: 检查浏览器下载权限
### 调试方法
```javascript
// 开启调试模式
const canvas = await html2canvas(element, {
logging: true, // 开启日志
debug: true // 调试模式
});
```
## 更新日志
### v1.0.0 (2025-01-21)
- ✅ 初始版本发布
- ✅ 支持PDF和PNG导出
- ✅ 集成到三个主要分析组件
- ✅ 完整的错误处理和用户体验