From 65a57289457a39bba0656a89958d9a48f8bde02e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Nov 2025 06:17:36 +0000 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=E7=BB=9F=E4=B8=80=20PDF=5FSTYL?= =?UTF-8?q?ES=20=E5=B8=B8=E9=87=8F=E5=AE=9A=E4=B9=89=EF=BC=8C=E6=B6=88?= =?UTF-8?q?=E9=99=A4=E4=BB=A3=E7=A0=81=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 变更内容 ### 1. pdfExportManager.js - 新增完整的 PDF_STYLES 常量定义并导出 - 作为统一的样式配置来源 - 添加注释说明其作为常量定义中心的职责 ### 2. pdfContentRenderers.js - 删除本地 PDF_STYLES 定义(38行) - 改为从 pdfExportManager 导入 PDF_STYLES - 保持所有渲染函数逻辑不变 ### 3. pdfTextHelpers.js - 删除本地 PDF_STYLES 定义(42行) - 改为从 pdfExportManager 导入 PDF_STYLES - 保持所有文本处理和页面管理函数不变 ## 重构效果 - ✅ 消除重复:PDF_STYLES 只定义一次 - ✅ 职责清晰:pdfExportManager 作为常量和流程协调中心 - ✅ 减少代码:净减少 30 行重复代码 - ✅ 保持稳定:分页、渲染等核心逻辑完全不变 ## 模块依赖关系 pdfExportManager.js (导出 PDF_STYLES) ├─ 被 pdfContentRenderers.js 导入 └─ 被 pdfTextHelpers.js 导入 --- src/utils/export/pdfContentRenderers.js | 38 ++------------------- src/utils/export/pdfExportManager.js | 44 ++++++++++++++++++++++++- src/utils/export/pdfTextHelpers.js | 42 ++--------------------- 3 files changed, 47 insertions(+), 77 deletions(-) diff --git a/src/utils/export/pdfContentRenderers.js b/src/utils/export/pdfContentRenderers.js index 2d1aca2..88eb8f3 100644 --- a/src/utils/export/pdfContentRenderers.js +++ b/src/utils/export/pdfContentRenderers.js @@ -6,42 +6,8 @@ // - Markdown 渲染(标题、引用、列表、内联格式) // - 内容区块渲染(Thinking、Artifact、Tool、Citations、Attachments) -/** - * PDF 样式配置(从主文件导入需要的常量) - * 注意:这些常量需要与 pdfExportManager.js 中的 PDF_STYLES 保持一致 - */ -export const PDF_STYLES = { - // 字体大小 - FONT_SIZE_TITLE: 20, - FONT_SIZE_H1: 16, - FONT_SIZE_H2: 14, - FONT_SIZE_SENDER: 12, - FONT_SIZE_BODY: 10, - FONT_SIZE_CODE: 9, - FONT_SIZE_TIMESTAMP: 8, - - // 颜色 (RGB) - COLOR_SENDER_HUMAN: [0, 102, 204], // 蓝色 - COLOR_SENDER_ASSISTANT: [102, 102, 102], // 灰色 - COLOR_TIMESTAMP: [150, 150, 150], // 浅灰 - COLOR_CODE_BG: [245, 245, 245], // 代码背景 - COLOR_SECTION_BG: [250, 250, 250], // 区块背景 - COLOR_TEXT: [0, 0, 0], // 黑色文本 - COLOR_BORDER: [200, 200, 200], // 边框颜色 - - // 间距 - MARGIN_LEFT: 15, - MARGIN_RIGHT: 15, - MARGIN_TOP: 15, - MARGIN_BOTTOM: 25, - LINE_HEIGHT: 5, - SECTION_SPACING: 8, - MESSAGE_SPACING: 10, - - // 页面 - PAGE_WIDTH: 210, // A4 宽度(mm) - PAGE_HEIGHT: 297, // A4 高度(mm) -}; +// 从 pdfExportManager 导入统一的 PDF 样式配置 +import { PDF_STYLES } from './pdfExportManager'; /** * 渲染代码块(支持跨页) diff --git a/src/utils/export/pdfExportManager.js b/src/utils/export/pdfExportManager.js index 61311a2..9640e37 100644 --- a/src/utils/export/pdfExportManager.js +++ b/src/utils/export/pdfExportManager.js @@ -11,14 +11,56 @@ // - 导出流程协调 // - 消息结构渲染 // - 文件名生成 +// - PDF样式常量定义(统一来源) import { jsPDF } from 'jspdf'; import { DateTimeUtils } from '../fileParser'; import { addChineseFontSupport } from './pdfFontHelper'; +/** + * PDF 样式配置(统一常量定义) + * 所有 PDF 模块都应从此处导入,避免重复定义 + */ +export const PDF_STYLES = { + // 字体大小 + FONT_SIZE_TITLE: 20, + FONT_SIZE_H1: 16, + FONT_SIZE_H2: 14, + FONT_SIZE_SENDER: 12, + FONT_SIZE_BODY: 10, + FONT_SIZE_CODE: 9, + FONT_SIZE_TIMESTAMP: 8, + FONT_SIZE_HEADER: 8, + FONT_SIZE_FOOTER: 8, + + // 颜色 (RGB) + COLOR_SENDER_HUMAN: [0, 102, 204], // 蓝色 + COLOR_SENDER_ASSISTANT: [102, 102, 102], // 灰色 + COLOR_TIMESTAMP: [150, 150, 150], // 浅灰 + COLOR_CODE_BG: [245, 245, 245], // 代码背景 + COLOR_SECTION_BG: [250, 250, 250], // 区块背景 + COLOR_TEXT: [0, 0, 0], // 黑色文本 + COLOR_HEADER: [100, 100, 100], // 页眉颜色 + COLOR_FOOTER: [150, 150, 150], // 页脚颜色 + COLOR_BORDER: [200, 200, 200], // 边框颜色 + + // 间距 + MARGIN_LEFT: 15, + MARGIN_RIGHT: 15, + MARGIN_TOP: 15, + MARGIN_BOTTOM: 25, + LINE_HEIGHT: 5, + SECTION_SPACING: 8, + MESSAGE_SPACING: 10, + FOOTER_HEIGHT: 15, + + // 页面(默认A4,会在运行时根据配置动态更新) + PAGE_WIDTH: 210, // A4 宽度(mm) + PAGE_HEIGHT: 297, // A4 高度(mm) +}; + // 导入内容渲染器 import { - PDF_STYLES, renderCodeBlock, parseCodeLineBold, renderMarkdownText, diff --git a/src/utils/export/pdfTextHelpers.js b/src/utils/export/pdfTextHelpers.js index 2e621a0..b29d274 100644 --- a/src/utils/export/pdfTextHelpers.js +++ b/src/utils/export/pdfTextHelpers.js @@ -7,46 +7,8 @@ // - 内联样式渲染(粗体、斜体、代码、链接) // - 页面管理(分页、页脚、书签、目录) -/** - * PDF样式配置 - */ -export const PDF_STYLES = { - // 字体大小 - FONT_SIZE_TITLE: 20, - FONT_SIZE_H1: 16, - FONT_SIZE_H2: 14, - FONT_SIZE_SENDER: 12, - FONT_SIZE_BODY: 10, - FONT_SIZE_CODE: 9, - FONT_SIZE_TIMESTAMP: 8, - FONT_SIZE_HEADER: 8, - FONT_SIZE_FOOTER: 8, - - // 颜色 (RGB) - COLOR_SENDER_HUMAN: [0, 102, 204], // 蓝色 - COLOR_SENDER_ASSISTANT: [102, 102, 102], // 灰色 - COLOR_TIMESTAMP: [150, 150, 150], // 浅灰 - COLOR_CODE_BG: [245, 245, 245], // 代码背景 - COLOR_SECTION_BG: [250, 250, 250], // 区块背景 - COLOR_TEXT: [0, 0, 0], // 黑色文本 - COLOR_HEADER: [100, 100, 100], // 页眉颜色 - COLOR_FOOTER: [150, 150, 150], // 页脚颜色 - COLOR_BORDER: [200, 200, 200], // 边框颜色 - - // 间距 - MARGIN_LEFT: 15, - MARGIN_RIGHT: 15, - MARGIN_TOP: 15, // 顶部边距(移除页眉,增加空间利用率) - MARGIN_BOTTOM: 25, // 底部边距为页脚留空间 - LINE_HEIGHT: 5, - SECTION_SPACING: 8, - MESSAGE_SPACING: 10, - FOOTER_HEIGHT: 15, // 页脚高度 - - // 页面 - PAGE_WIDTH: 210, // A4 宽度(mm) - PAGE_HEIGHT: 297, // A4 高度(mm) -}; +// 从 pdfExportManager 导入统一的 PDF 样式配置 +import { PDF_STYLES } from './pdfExportManager'; /** * 清理和标准化文本,防止编码问题 From ec40804905774fcccdea70f7f2ac51bf55dcefab Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Nov 2025 07:57:16 +0000 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E9=85=8D=E7=BD=AE=E4=BB=A5=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=20dev=20=E4=BB=93=E5=BA=93=E9=83=A8=E7=BD=B2=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题 - package.json 中 homepage 配置为 'https://yalums.github.io/dev' - 但字体路径硬编码为 '/lyra-exporter/fonts/...' - 导致部署后字体加载失败 (404 错误) ## 修复 将所有字体路径从 '/lyra-exporter/fonts/' 更新为 '/dev/fonts/': - addChineseFontSupport() 中的 fontConfigs - preloadFont() 中的 fontPaths ## 影响 - ✅ 字体路径与 homepage 配置一致 - ✅ 部署到 GitHub Pages 后字体可正常加载 - ✅ PDF 导出功能中文显示正常 --- src/utils/export/pdfFontHelper.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utils/export/pdfFontHelper.js b/src/utils/export/pdfFontHelper.js index 1074c2c..050936a 100644 --- a/src/utils/export/pdfFontHelper.js +++ b/src/utils/export/pdfFontHelper.js @@ -101,21 +101,21 @@ export async function addChineseFontSupport(pdf) { // 定义字体配置 - 使用阿如汉字黑体 const fontConfigs = [ { - path: '/lyra-exporter/fonts/ARUDJingxihei-Regular.ttf', + path: '/dev/fonts/ARUDJingxihei-Regular.ttf', name: 'ARUDJingxihei', style: 'normal', weight: 400, description: 'Regular (正常)' }, { - path: '/lyra-exporter/fonts/ARUDJingxihei-Bold.ttf', + path: '/dev/fonts/ARUDJingxihei-Bold.ttf', name: 'ARUDJingxihei', style: 'bold', weight: 700, description: 'Bold (粗体)' }, { - path: '/lyra-exporter/fonts/ARUDJingxihei-Light.ttf', + path: '/dev/fonts/ARUDJingxihei-Light.ttf', name: 'ARUDJingxihei', style: 'light', weight: 300, @@ -407,9 +407,9 @@ export async function preloadFont(silent = false) { } const fontPaths = [ - '/lyra-exporter/fonts/ARUDJingxihei-Regular.ttf', - '/lyra-exporter/fonts/ARUDJingxihei-Bold.ttf', - '/lyra-exporter/fonts/ARUDJingxihei-Light.ttf' + '/dev/fonts/ARUDJingxihei-Regular.ttf', + '/dev/fonts/ARUDJingxihei-Bold.ttf', + '/dev/fonts/ARUDJingxihei-Light.ttf' ]; // 先检查缓存是否已存在