- MarkerPhotoPanel:基于 RNGH PinchGesture + Reanimated 实现捏合缩放(1x~5x);放大后可双指拖动,放大模式下禁用左右切图手势 - _layout:根布局包裹 GestureHandlerRootView,解决 Modal 内手势失效问题 - 蓝图:新增 pdf-report 模块(concept),photo-capture 补充缩放任务卡(done) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
72 lines
3.3 KiB
Markdown
72 lines
3.3 KiB
Markdown
---
|
||
id: pdf-report
|
||
name: PDF 报告导出
|
||
area: rn-app
|
||
status: concept
|
||
---
|
||
|
||
## 概述
|
||
|
||
在查看模式下,将当前楼层的侧边栏物品清单 + 地图标记点信息导出为 PDF 报告。
|
||
报告完整呈现所有数据(不依赖屏幕截图),支持 20-30+ 标记点场景。
|
||
|
||
## 需求背景
|
||
|
||
- 不动产摸底完成后,需要输出一份可存档/分享的书面报告
|
||
- 报告内容 = 左侧标记点清单(物品名、数量、确认状态)+ 右侧带编号图钉的楼层平面图
|
||
- 需支持多个楼层(每层生成一页或分组)
|
||
|
||
## 技术调研结论
|
||
|
||
### 选定方案:客户端 HTML → PDF(expo-print)
|
||
|
||
| 维度 | 说明 |
|
||
|------|------|
|
||
| 方案 | 构建 HTML 字符串 → `expo-print` 本地 WebView 渲染 → 导出 PDF |
|
||
| 离线 | ✅ 完全离线,无需服务端 |
|
||
| 地图渲染 | `imageUri`(已有 base64 JPEG)作 `<img>` 底图,标记点用 `position:absolute` 圆圈叠加 |
|
||
| SVG 矢量层 | ⚠️ `floorMaps.generated.ts` SVG 体积极大(百万字符),不内嵌,用 JPEG 底图代替 |
|
||
| 标记点定位 | marker.x / marker.y 为归一化坐标(0-1),乘以图片宽高即可精确定位 |
|
||
| 物品清单 | 数据库直接查,不依赖屏幕状态,支持任意数量 |
|
||
| 分页 | HTML `page-break-inside: avoid` 自动处理 |
|
||
|
||
### 排除的方案
|
||
|
||
- **截图方案**:ScrollView 只截可见区,30 个标记点数据不完整 ❌
|
||
- **SVG 直接嵌入**:文件体积导致 WebView 崩溃风险 ❌
|
||
- **服务端生成**:需要后端,与离线架构冲突 ❌
|
||
|
||
## 报告结构设想(横版 A4)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 项目名称 1F 楼层报告 导出日期 │
|
||
├──────────────┬──────────────────────────────────────────┤
|
||
│ 标记点清单 │ │
|
||
│ │ 楼层平面图(JPEG 底图) │
|
||
│ ① 红 电梯 │ + 彩色圆圈标记点(含编号) │
|
||
│ ☑ 电梯×1 │ │
|
||
│ ② 紫 办公区 │ │
|
||
│ ☑ 电脑×2 │ │
|
||
│ ☑ 打印机×1│ │
|
||
│ ③ ... │ │
|
||
└──────────────┴──────────────────────────────────────────┘
|
||
(标记点多时自动换页,地图区域保持在首页)
|
||
```
|
||
|
||
## 依赖
|
||
|
||
- `expo-print`(需新增安装,Expo 官方,无需 rebuild)
|
||
- `expo-sharing`(已安装,用于分享 PDF 文件)
|
||
- `expo-media-library`(已安装,可选保存到本地)
|
||
|
||
## 待确认
|
||
|
||
- [ ] 报告是否需要封面页(项目名称、地址、日期等信息从哪里来)
|
||
- [ ] 是否需要导出所有楼层 or 仅当前楼层
|
||
- [ ] PDF 分享方式:微信/邮件分享 or 保存到本地文件
|
||
|
||
## 任务卡
|
||
|
||
<!-- 待需求确认后拆解 -->
|