feat(export): 多格式后台导出、主题与警告框渲染 #43

Merged
Kronecker merged 0 commits from feat/export-service into main 2026-09-07 01:38:36 +08:00
Owner

新增笔记与 Markdown 文本的 HTML、PDF、DOCX 后台导出服务,并补齐主题、警告框和嵌套表格的导出行为。创建请求立即返回 queued,客户端轮询状态并下载产物;支持取消和产物过期管理。

主要变更

  • 提供创建、查询、列表、取消和下载接口,通过统一 Document AST 分发到三种导出器。
  • HTML 支持 light、dark、sepia、paper-moments、midnight-purple 五套固定导出配色,修正代码、表格和函数图像文字的深色对比度。
  • 警告框支持内置类型、别名、自定义类型回退、无空格标题和富文本正文;HTML 保留展开/折叠,PDF、DOCX 完整输出内容。
  • 引用、警告框、列表及交叉嵌套中的表格按真实表格导出。列表内块级内容保留顺序与缩进,DOCX 表格缩进累加到唯一属性。
  • 函数图像采用受限表达式解析和共享几何计算,HTML 内嵌 SVG、PDF 内嵌矢量图;细分与采样预算限制计算量,避免跨渐近线错误连线。
  • 同步开发说明、接口契约与依赖锁文件,已整合当前 main。

验证结果与复现方法

  • 提交 cc652508efca42866691c632d10f3d46dbbcf0d0:后端全量 838 项测试通过,仅有既有 Starlette/httpx 弃用提示。
  • 在隔离 APP_DATA_DIR、APP_DB_PATH、APP_VAULT_PATH 的临时目录中运行 pytest tests -q -p no:cacheprovider;导出专项可运行 pytest tests/test_export.py -q。
  • 自动检查三种产物中的警告框标题、正文与排列顺序;表格验证 HTML table、PDF Table 与 DOCX 原生单元格结构。
  • 浏览器实际检查五个主题的嵌套 WARNING/NOTE、表格与文字对比度;内层类型配色不继承外层警告色。
  • 补充检查 1~4 层列表/警告框/表格嵌套:DOCX 唯一缩进属性依次为 360、720、1080、1440 twips,PDF 均成功导出;长警告框跨 4 页的 PDF 缩进与后续段落位置正常。
  • 函数图像回归覆盖陡峭连续曲线、渐近线、非有限采样点、累计计算预算,以及 SVG/PDF 几何一致性。
  • git diff --check 通过,远程分支与本地提交一致。

当前边界

  • PDF、DOCX 使用浅色打印样式;请求其他主题时明确返回 warning。HTML 使用固定导出配色,不执行任意主题包 CSS。
  • Mermaid 暂保留源码占位并提示;DOCX 函数图像仍为占位,代码语法高亮及部分打印样式简化见开发说明。
  • 本 PR 替代已关闭且未合并的 #41;本轮审阅未发现新的合并阻塞问题。
新增笔记与 Markdown 文本的 HTML、PDF、DOCX 后台导出服务,并补齐主题、警告框和嵌套表格的导出行为。创建请求立即返回 queued,客户端轮询状态并下载产物;支持取消和产物过期管理。 ## 主要变更 - 提供创建、查询、列表、取消和下载接口,通过统一 Document AST 分发到三种导出器。 - HTML 支持 light、dark、sepia、paper-moments、midnight-purple 五套固定导出配色,修正代码、表格和函数图像文字的深色对比度。 - 警告框支持内置类型、别名、自定义类型回退、无空格标题和富文本正文;HTML 保留展开/折叠,PDF、DOCX 完整输出内容。 - 引用、警告框、列表及交叉嵌套中的表格按真实表格导出。列表内块级内容保留顺序与缩进,DOCX 表格缩进累加到唯一属性。 - 函数图像采用受限表达式解析和共享几何计算,HTML 内嵌 SVG、PDF 内嵌矢量图;细分与采样预算限制计算量,避免跨渐近线错误连线。 - 同步开发说明、接口契约与依赖锁文件,已整合当前 main。 ## 验证结果与复现方法 - 提交 cc652508efca42866691c632d10f3d46dbbcf0d0:后端全量 838 项测试通过,仅有既有 Starlette/httpx 弃用提示。 - 在隔离 APP_DATA_DIR、APP_DB_PATH、APP_VAULT_PATH 的临时目录中运行 `pytest tests -q -p no:cacheprovider`;导出专项可运行 `pytest tests/test_export.py -q`。 - 自动检查三种产物中的警告框标题、正文与排列顺序;表格验证 HTML table、PDF Table 与 DOCX 原生单元格结构。 - 浏览器实际检查五个主题的嵌套 WARNING/NOTE、表格与文字对比度;内层类型配色不继承外层警告色。 - 补充检查 1~4 层列表/警告框/表格嵌套:DOCX 唯一缩进属性依次为 360、720、1080、1440 twips,PDF 均成功导出;长警告框跨 4 页的 PDF 缩进与后续段落位置正常。 - 函数图像回归覆盖陡峭连续曲线、渐近线、非有限采样点、累计计算预算,以及 SVG/PDF 几何一致性。 - `git diff --check` 通过,远程分支与本地提交一致。 ## 当前边界 - PDF、DOCX 使用浅色打印样式;请求其他主题时明确返回 warning。HTML 使用固定导出配色,不执行任意主题包 CSS。 - Mermaid 暂保留源码占位并提示;DOCX 函数图像仍为占位,代码语法高亮及部分打印样式简化见开发说明。 - 本 PR 替代已关闭且未合并的 #41;本轮审阅未发现新的合并阻塞问题。
Author
Owner

本轮审阅完成,审阅提交为 cc652508efca42866691c632d10f3d46dbbcf0d0。

此前发现的问题已修复并验证:

  • 深色导出的代码、表格及图表文字对比度。
  • 警告框语法与工作区不一致。
  • 列表内警告框标题、正文丢失。
  • 警告框和列表内的表格未按表格渲染。
  • 嵌套警告框继承外层类型颜色。
  • DOCX 嵌套表格重复追加缩进属性。

验证采用产物内容与结构断言,并补充浏览器主题检查、PDF 跨页检查及多层嵌套检查。后端全量 838 项测试通过,仅保留既有 Starlette/httpx 弃用提示。

本轮未发现新的合并阻塞问题,建议合并。该结论针对上述提交;如后续有新增改动,应重新验证受影响范围。

本轮审阅完成,审阅提交为 cc652508efca42866691c632d10f3d46dbbcf0d0。 此前发现的问题已修复并验证: - 深色导出的代码、表格及图表文字对比度。 - 警告框语法与工作区不一致。 - 列表内警告框标题、正文丢失。 - 警告框和列表内的表格未按表格渲染。 - 嵌套警告框继承外层类型颜色。 - DOCX 嵌套表格重复追加缩进属性。 验证采用产物内容与结构断言,并补充浏览器主题检查、PDF 跨页检查及多层嵌套检查。后端全量 838 项测试通过,仅保留既有 Starlette/httpx 弃用提示。 本轮未发现新的合并阻塞问题,建议合并。该结论针对上述提交;如后续有新增改动,应重新验证受影响范围。
Kronecker merged commit 95095197df into main 2026-09-07 01:38:36 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Kronecker/NotesAgentic#43