python将目录下的所欲md文件转化为html和pdf

python将目录下的所欲md文件转化为html和pdf

python 复制代码
import os
import subprocess
import win32com.client as win32


def md_to_docx(md_path, docx_path):
    """
    将 Markdown 文件转换为 DOCX 文件
    :param md_path: Markdown 文件的路径
    :param docx_path: 输出 DOCX 文件的路径
    :return: 转换成功返回 True,失败返回 False
    """
    try:
        # 构建 pandoc 命令
        command = ['pandoc', md_path, '-o', docx_path]
        # 执行命令
        result = subprocess.run(command, check=True, capture_output=True, text=True)
        print(f"成功将 {md_path} 转换为 {docx_path}")
        return True
    except subprocess.CalledProcessError as e:
        print(f"转换 {md_path} 到 {docx_path} 时出错: {e.stderr.strip()}")
        return False
    except FileNotFoundError:
        print("未找到 pandoc 命令,请确保 pandoc 已正确安装并配置到系统路径中。")
        return False


def docx_to_pdf(docx_path, pdf_path):
    """
    将 DOCX 文件转换为 PDF 文件
    :param docx_path: DOCX 文件的路径
    :param pdf_path: 输出 PDF 文件的路径
    :return: 转换成功返回 True,失败返回 False
    """
    try:
        word = win32.gencache.EnsureDispatch('Word.Application')
        doc = word.Documents.Open(docx_path)
        doc.SaveAs(pdf_path, FileFormat=17)  # 17 代表 PDF 文件格式
        doc.Close()
        word.Quit()
        print(f"成功将 {docx_path} 转换为 {pdf_path}")
        return True
    except Exception as e:
        print(f"转换 {docx_path} 到 {pdf_path} 时出错: {e}")
        return False


def md_to_pdf(input_file, output_file):
    """
    先将 Markdown 转换为 DOCX,再将 DOCX 转换为 PDF
    :param input_file: Markdown 文件路径
    :param output_file: 输出的 PDF 文件路径
    """
    # 生成临时 DOCX 文件路径
    temp_docx_file = os.path.splitext(input_file)[0] + '.temp.docx'
    # 转换 Markdown 到 DOCX
    if md_to_docx(input_file, temp_docx_file):
        # 转换 DOCX 到 PDF
        if docx_to_pdf(temp_docx_file, output_file):
            # 转换成功,删除临时 DOCX 文件
            try:
                os.remove(temp_docx_file)
                print(f"已删除临时文件 {temp_docx_file}")
            except OSError as e:
                print(f"删除临时文件 {temp_docx_file} 时出错: {e}")
        else:
            print(f"未能将 {temp_docx_file} 转换为 {output_file}")
    else:
        print(f"未能将 {input_file} 转换为 {temp_docx_file}")


def convert_all_md_to_pdf(root_dir):
    """
    遍历指定目录下的所有 Markdown 文件并转换为 PDF
    :param root_dir: 根目录
    """
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            if file.endswith('.md'):
                input_file = os.path.join(root, file)
                # 构建输出的 PDF 文件路径
                output_file = os.path.splitext(input_file)[0] + '.pdf'
                md_to_pdf(input_file, output_file)


if __name__ == "__main__":
    # 替换为你要处理的根目录
    root_directory = 'D:\\Code'
    convert_all_md_to_pdf(root_directory)
相关推荐
七夜zippoe4 分钟前
模型部署优化:ONNX与TensorRT实战——从训练到推理的完整优化链路
人工智能·python·tensorflow·tensorrt·onnx
maxmaxma7 分钟前
ROS2 机器人 少年创客营:Day 7
人工智能·python·机器人·ros2
牢七14 分钟前
jfinal_cms-v5.1.0 白盒 nday
开发语言·python
开开心心就好29 分钟前
伪装文件历史记录!修改时间的黑科技软件
java·前端·科技·r语言·edge·pdf·语音识别
纤纡.31 分钟前
基于 PyTorch 手动实现 CBOW 词向量训练详解
人工智能·pytorch·python·深度学习
词元Max34 分钟前
2.5 Python 类型注解与运行时类型检查
开发语言·python
沪漂阿龙36 分钟前
深度解析Pandas数据组合:从concat到merge,打通你的数据处理任督二脉
python·数据分析·pandas
童园管理札记42 分钟前
2026实测|GPT-4.5+Agent智能体:3小时搭建企业级客服系统,附完整源码与部署教程(一)
经验分享·python·深度学习·重构·学习方法
大飞记Python1 小时前
【2026更新】Python基础学习指南(AI版)——安装
自动化测试·python·ai编程
AI街潜水的八角1 小时前
YOLO26手语识别项目实战1-三十五种手语实时检测系统数据集说明(含下载链接)
python·深度学习