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)
相关推荐
渣渣苏几秒前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity9 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道12 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH154558913125 分钟前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76526 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子31 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q41 分钟前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手1 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手1 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
熊猫_豆豆1 小时前
YOLOP车道检测
人工智能·python·算法