Obsidian对于pdf导出的支持很弱,体现在不能导出文件内部的结构,而且没有多文件导出的方式。值得一提的是,前面的问题可以使用Better Export这个插件实现,后者的一种实现方式是将多个md文件的内容放在同一个md文件内然后导出,在这种思路下有者使用dataviewJS或者使用easyBake插件等的解决方案。
我的问题也是多文档导出的问题,不过由于涉及的文档数量比较多,每个文档的内容也比较多,堆放在同一个文件中会非常卡。我希望有将这些文件同时批量导出为pdf的方式。请问现阶段有这样的插件或者其他自动化解决方案么?谢谢
前提准备
-
安装 Pandoc 并将其添加到 PATH 中
-
确保 Markdown 文件中引用图片的路径为相对路径(例如:
),图片文件放在相应的目录中 -
在当前工作目录下放置所有待转换的 .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 下,资源搜索路径多个路径之间应使用分号(
;)分隔。