Python脚本批量将md文件转化成pdf

自己学编程时做了很多笔记,如今累积起来已经有几十个了,有很多图片链,怕哪天图床垮了图片就找不到了,于是就想把当时的 md 文件都转成 pdf 。

看了点文章,就开始实践:

1.下载 pandoc 和 CTex

2.ChatGpt 弄一个脚本,需求是扫描脚本所在目录所有的 md 文件,并输出 pdf 文件到指定目录下,pdf 引擎用 xelatex, 转换用的 latex 模版需要和 md 文件目录放在一起。

最后得到这么一个脚本:

import os
import subprocess
import sys
directory_path = './'

# 确定输出文件夹
if len(sys.argv) == 2:
    output_folder = sys.argv[1]
else:
    output_folder = ""

# 确保输出文件夹存在
if output_folder and not os.path.exists(output_folder):
    os.makedirs(output_folder)

converted_folder = "converted"
failed_folder = "failed"

if not os.path.exists(converted_folder):
    os.makedirs(converted_folder)

if not os.path.exists(failed_folder):
    os.makedirs(failed_folder)

# 获取目录下所有的md文件
md_files = [f for f in os.listdir(directory_path) if f.endswith(".md")]

for md_file in md_files:
    # 构建输出文件路径
    if output_folder:
        output_path = f'{
     output_folder}/{
     md_file.replace(".md", ".pdf")}'
    else:
        output_path = f'{
     md_file.replace(".md", ".pdf")}'

    # 构建 pandoc 命令
    cmd = f'pandoc "{
     md_file}" -o "{
     output_path}" --pdf-engine=xelatex --template eisvogel.latex --listings -V CJKmainfont="Microsoft YaHei"'
    print(cmd)
    # 执行命令
    try:
        subprocess.run(cmd, shell=True, check=True)
        os.rename(os.path.join(directory_path, md_file), os.path.join(converted_folder, md_file))
    except subprocess.CalledProcessError:
        os.rename(os.path.join(directory_path, md_file), os.path.join(failed_folder, md_file))

print("Conversion complete.")

由于我用的 typora ,想让输出的界面效果和 typora 的尽量一致,于是在 typora 官网上找到了个叫eisvogel的模版,模板内容太长了,放在文章最后发。

这个脚本我刚开始尝试下Windows的环境下使用,但不知道是Powershell解析问题还是什么,搞了半天latex出现各种莫名奇妙的错误,查网几个小时下来找不到解决方法,最后只得放弃。

过了几个月,又想起这事,这次不走windows了,改到了wsl上,一些问题查网加上通义AI,总算走通了,做个记录,有windows路线打通了的朋友,告诉我一声。

环境:

OS:Windows 11专业版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值