Spaces:
Sleeping
Sleeping
import os | |
import argparse | |
from input_parser import parse_input_text | |
from ppt_generator import generate_presentation | |
from template_manager import load_template, print_layouts, get_layout_mapping | |
from layout_manager import LayoutManager | |
from config import Config | |
from logger import LOG # 引入 LOG 模块 | |
from content_formatter import ContentFormatter | |
from content_assistant import ContentAssistant | |
# 新增导入 docx_parser 模块中的函数 | |
from docx_parser import generate_markdown_from_docx | |
# 定义主函数,处理输入并生成 PowerPoint 演示文稿 | |
def main(input_file): | |
config = Config() # 加载配置文件 | |
content_formatter = ContentFormatter() | |
content_assistant = ContentAssistant() | |
# 检查输入文件是否存在 | |
if not os.path.exists(input_file): | |
LOG.error(f"{input_file} 不存在。") # 如果文件不存在,记录错误日志 | |
return | |
# 根据输入文件的扩展名判断文件类型 | |
file_extension = os.path.splitext(input_file)[1].lower() | |
if file_extension in ['.md', '.markdown']: | |
# 处理 markdown 文件 | |
with open(input_file, 'r', encoding='utf-8') as file: | |
input_text = file.read() | |
elif file_extension == '.docx': | |
# 处理 docx 文件 | |
LOG.info(f"正在解析 docx 文件: {input_file}") | |
# 调用 generate_markdown_from_docx 函数,获取 markdown 内容 | |
raw_content = generate_markdown_from_docx(input_file) | |
markdown_content = content_formatter.format(raw_content) | |
input_text = content_assistant.adjust_single_picture(markdown_content) | |
else: | |
# 不支持的文件类型 | |
LOG.error(f"暂不支持的文件格式: {file_extension}") | |
return | |
# 加载 PowerPoint 模板,并打印模板中的可用布局 | |
ppt_template = load_template(config.ppt_template) # 加载模板文件 | |
LOG.info("可用的幻灯片布局:") # 记录信息日志,打印可用布局 | |
print_layouts(ppt_template) # 打印模板中的布局 | |
# 初始化 LayoutManager,使用配置文件中的 layout_mapping | |
layout_manager = LayoutManager(get_layout_mapping(ppt_template)) | |
# 调用 parse_input_text 函数,解析输入文本,生成 PowerPoint 数据结构 | |
powerpoint_data, presentation_title = parse_input_text(input_text, layout_manager) | |
LOG.info(f"解析转换后的 ChatPPT PowerPoint 数据结构:\n{powerpoint_data}") # 记录信息日志,打印解析后的 PowerPoint 数据 | |
# 定义输出 PowerPoint 文件的路径 | |
output_pptx = f"outputs/{presentation_title}.pptx" | |
# 调用 generate_presentation 函数生成 PowerPoint 演示文稿 | |
generate_presentation(powerpoint_data, config.ppt_template, output_pptx) | |
# 程序入口 | |
if __name__ == "__main__": | |
# 设置命令行参数解析器 | |
parser = argparse.ArgumentParser(description='从 markdown 或 docx 文件生成 PowerPoint 演示文稿。') | |
parser.add_argument( | |
'input_file', # 输入文件参数 | |
nargs='?', # 可选参数 | |
default='inputs/markdown/test_input.md', # 默认值 | |
help='输入 markdown 或 docx 文件的路径(默认: inputs/markdown/test_input.md)' | |
) | |
# 解析命令行参数 | |
args = parser.parse_args() | |
# 使用解析后的输入文件参数运行主函数 | |
main(args.input_file) | |