# 前端页面导出功能设置说明 ## 功能概述 新增了前端页面直接导出为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中使用 ``` ### 标记导出内容 为要导出的内容容器添加ID和data属性: ```tsx
{/* 要导出的内容 */}
``` ### 隐藏不需要导出的元素 为不需要出现在导出文件中的元素添加类名或属性: ```tsx
{/* 下载按钮等UI元素 */}
``` ## 技术实现 ### 核心技术栈 - **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导出 - ✅ 集成到三个主要分析组件 - ✅ 完整的错误处理和用户体验