Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 2 additions & 36 deletions src/utils/export/pdfContentRenderers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';

/**
* 渲染代码块(支持跨页)
Expand Down
44 changes: 43 additions & 1 deletion src/utils/export/pdfExportManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
12 changes: 6 additions & 6 deletions src/utils/export/pdfFontHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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'
];

// 先检查缓存是否已存在
Expand Down
42 changes: 2 additions & 40 deletions src/utils/export/pdfTextHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';

/**
* 清理和标准化文本,防止编码问题
Expand Down