pandoc + wkhtmltox 批量转换Markdown文件为PDF文件

1. Pandoc的安装

  1. 下载并安装

1.1 解压文件

pandoc-3.6.2-windows-x86_64.zip 解压到一个目录,例如:

复制

复制代码
C:\pandoc

解压后的文件夹中应包含以下文件:

  • pandoc.exe(主程序)

  • 其他相关文件(如文档和依赖项)。


1.2. 将 Pandoc 添加到系统环境变量

为了在命令行中直接使用 pandoc 命令,你需要将 Pandoc 的路径添加到系统的 PATH 环境变量中。

步骤如下:

  1. 右键点击"此电脑"或"我的电脑",选择"属性"。

  2. 点击"高级系统设置"。

  3. 在"系统属性"窗口中,点击"环境变量"。

  4. 在"系统变量"部分,找到 Path 变量,点击"编辑"。

  5. 点击"新建",然后输入 Pandoc 的路径(例如 C:\pandoc)。

  6. 点击"确定"保存更改。


1.3. 验证安装

打开命令提示符(cmdPowerShell),运行以下命令验证 Pandoc 是否安装成功:

bash 复制代码
pandoc --version

如果安装成功,你会看到 Pandoc 的版本信息,例如:

复制代码
pandoc 3.6.2

2. wkhtmltopdf 的安装

确保 wkhtmltopdf 已正确安装并添加到系统的 PATH 环境变量中。

2.1 下载并安装 wkhtmltopdf

2.2 将 wkhtmltopdf 的路径添加到系统的 PATH 环境变量中。

2.3 验证安装:

bash 复制代码
wkhtmltopdf --version

如果安装成功,你会看到版本信息。

3. 执行脚本

假设你的目录结构如下:

bash 复制代码
C:\projects\
├── notes\
   ├── note1.md
   ├── note2.md
   ├── images\
      ├── example1.jpg
      ├── example2.jpg
   └── subdir\
      ├── note3.md
      ├── note4.md
      └── images\
         ├── example3.jpg
         ├── example4.jpg

运行脚本后,生成的 PDF 文件会与对应的 Markdown 文件位于同一目录:

bash 复制代码
C:\projects\
├── notes\
   ├── note1.md
   ├── note1.pdf
   ├── note2.md
   ├── note2.pdf
   ├── images\
      ├── example1.jpg
      ├── example2.jpg
   └── subdir\
      ├── note3.md
      ├── note3.pdf
      ├── note4.md
      ├── note4.pdf
      └── images\
         ├── example3.jpg
         ├── example4.jpg

PowerShell 脚本代码,主要用于将指定目录下的所有.md(Markdown)文件转换为.pdf文件,并将转换后的.pdf文件保存到对应的目录下。

bash 复制代码
# 遍历所有md文件,将每个md文件转换为pdf,并保存到对应的目录下
Get-ChildItem -Recurse -Filter *.md | ForEach-Object {
    $title = $_.BaseName  # 获取文件名(不含扩展名)
    $outputDir = $_.DirectoryName  # 获取文件所在目录
    $outputFile = Join-Path $outputDir "$title.pdf"  # 输出文件路径
    
    # 切换到当前md文件所在目录
    Push-Location $_.DirectoryName
    
    try {
        # 使用相对于当前目录的文件名进行转换
        $relativeInputFile = $_.Name
        
        # 调用 pandoc 进行转换
        pandoc $relativeInputFile -o $outputFile `
            --pdf-engine=wkhtmltopdf `
            --pdf-engine-opt=--enable-local-file-access `
            --metadata title="$title"
            
        Write-Host "成功转换: $($_.FullName) -> $outputFile"
    }
    finally {
        # 恢复原来的工作目录
        Pop-Location
    }
}
相关推荐
m0_738098027 分钟前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
好家伙VCC9 分钟前
# 发散创新:用 Rust构建高性能游戏日系统,从零实现事件驱动架构 在现代游戏开发中,**性能与可扩展性**是核心命题。传统基于
java·python·游戏·架构·rust
小璐资源网17 分钟前
Java 21 新特性实战:虚拟线程详解
java·开发语言·python
2301_8194143036 分钟前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
WZTTMoon37 分钟前
从互斥锁到无锁,Java 20年并发安全进化史
java·python·安全
Sakuraba Ema1 小时前
从零理解 MoE(Mixture of Experts)混合专家:原理、数学、稀疏性、专家数量影响与手写 PyTorch 实现
人工智能·pytorch·python·深度学习·数学·llm·latex
嫂子的姐夫1 小时前
041-全扣补环境:同花顺
爬虫·python·js逆向·逆向
2401_894241921 小时前
机器学习与人工智能
jvm·数据库·python
vx-程序开发1 小时前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php