一次性,多文件导出pdf

Obsidian对于pdf导出的支持很弱,体现在不能导出文件内部的结构,而且没有多文件导出的方式。值得一提的是,前面的问题可以使用Better Export这个插件实现,后者的一种实现方式是将多个md文件的内容放在同一个md文件内然后导出,在这种思路下有者使用dataviewJS或者使用easyBake插件等的解决方案。
我的问题也是多文档导出的问题,不过由于涉及的文档数量比较多,每个文档的内容也比较多,堆放在同一个文件中会非常卡。我希望有将这些文件同时批量导出为pdf的方式。请问现阶段有这样的插件或者其他自动化解决方案么?谢谢

前提准备

  • 安装 Pandoc 并将其添加到 PATH 中

  • 确保 Markdown 文件中引用图片的路径为相对路径(例如:![图](images/example.png``)),图片文件放在相应的目录中

  • 在当前工作目录下放置所有待转换的 .md 文件

在文件夹根目录中,右键打开PowerShell

代码

获取当前目录作为源目录

$basePath = (Get-Location).Path

在当前目录下创建一个名为 docs 的文件夹作为输出目录

outputFolder=Join−PathoutputFolder = Join-PathoutputFolder=Join−Path

basePath “docs” New-Item -ItemType Directory -Force -Path $outputFolder

定义图片文件夹的绝对路径

imagesPath=Join−PathimagesPath = Join-PathimagesPath=Join−Path

basePath “images”

递归查找所有 .md 文件

Get-ChildItem -Recurse -Filter *.md | ForEach-Object {

file=file =file=

_ # 计算相对于源目录的子文件夹路径

relativePath=relativePath =relativePath=

file.DirectoryName.Substring(

basePath.Length)if(basePath.Length) if (basePath.Length)if(

relativePath.StartsWith(“”) -or

relativePath.StartsWith(“/”)) {

relativePath =

relativePath.Substring(1) } # 构造输出目录中对应的子文件夹路径,并创建该文件夹

targetFolder = Join-Path

outputFolderoutputFolderoutputFolder

relativePath New-Item -ItemType Directory -Force -Path $targetFolder | Out-Null

# 使用 Pandoc 转换为 docx 文件
# --resource-path 参数设置为根目录和图片文件夹的绝对路径,确保无论文件层级如何都能正确找到图片
pandoc $file.FullName --resource-path="$basePath;$imagesPath" -o (Join-Path $targetFolder ($file.BaseName + '.docx'))

Plain Text

}

说明

  • 绝对路径指****定资源$base``Path(即根目录)和 $imag``esPath(图片所在的绝对路径)通过分号分隔传给 Pandoc 的 --res``ource-path 参数,这样 Pandoc 无论在哪个层级下处理 Markdown 文件,都能在根目录或指定的 images 文件夹中查找到图片。

  • 使用 Wi****ndows 分隔符 注意在 Windows 下,资源搜索路径多个路径之间应使用分号(;)分隔。