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)
相关推荐
lulu121654407811 分钟前
Claude Code项目大了响应慢怎么办?Subagents、Agent Teams、Git Worktree、工作流编排四种方案深度解析
java·人工智能·python·ai编程
Ares-Wang34 分钟前
Flask》》 Flask-Bcrypt 哈希加密
后端·python·flask
kongba0071 小时前
项目打包 Python Flask 项目发布与打包专家 提示词V1.0
开发语言·python·flask
belldeep1 小时前
介绍 遗传算法 与 TSP问题
python·遗传算法·ga·tsp问题
解救女汉子2 小时前
SQL触发器如何获取触发源应用名_利用APP_NAME函数追踪
jvm·数据库·python
思绪无限2 小时前
YOLOv5至YOLOv12升级:血细胞检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·yolov12·血细胞检测
skywalk81634 小时前
发现Kotti项目的python包Beaker 存在安全漏洞
开发语言·网络·python·安全
天天进步20154 小时前
Python全栈项目:从零构建基于 Django 的知识管理系统(KMS)
开发语言·python·django
珎珎啊5 小时前
Python3 迭代器与生成器
开发语言·python
思绪无限5 小时前
YOLOv5至YOLOv12升级:金属锈蚀检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·yolov12