如何使用Pandoc将Markdown转RTF时保留图片?
解决方案:Markdown转带图片的RTF/富文本(macOS)
核心问题
textutil在HTML转RTF时不会下载并嵌入远程图片,导致RTF中图片丢失。以下是两种无需大幅改动现有工作流的替代方案:
方案1:直接用Pandoc生成RTF(推荐)
跳过HTML中转步骤,直接让Pandoc把Markdown转为RTF,它会自动下载远程图片并嵌入到输出文件中,同时保留你的CSS样式。
修改脚本中的命令为:
// 替换原来的两步命令为这一步 await execAsync(`${pandocPath} -f markdown-smart -t rtf -H ${cssHtmlPath} ${tempMarkdownPath} -o ${tempRtfPath}`);
如果需要直接复制到剪贴板,可以生成RTF后再执行:
await execAsync(`pbcopy < ${tempRtfPath}`);
方案2:通过AppleScript将HTML转为剪贴板富文本
保留Pandoc转HTML的步骤,用AppleScript把HTML内容转换成macOS支持的富文本格式并复制到剪贴板,邮件客户端会自动解析并显示图片。
修改脚本如下:
// 保留Pandoc生成HTML的步骤 await execAsync(`${pandocPath} -f markdown-smart -t html -H ${cssHtmlPath} ${tempMarkdownPath} -o ${tempHtmlPath}`); // 读取HTML内容并转义双引号(避免AppleScript语法错误) const htmlContent = (await fs.readFile(tempHtmlPath, 'utf8')).replace(/"/g, '\\"'); // 用AppleScript将HTML写入剪贴板 await execAsync(`osascript -e 'set the clipboard to "${htmlContent}" as «class HTML»'`);
这种方式无需生成RTF文件,直接把富文本放到剪贴板,更适合Raycast扩展的使用场景,粘贴到邮件时会自动渲染图片和样式。
补充说明
- Pandoc处理远程图片时会自动下载并嵌入,无需额外配置;
- macOS剪贴板的
«class HTML»格式被主流邮件客户端(如Mail.app、Outlook)支持,能完整保留图片和样式; - 若需自定义RTF样式,可继续通过
-H参数传入CSS,Pandoc会将样式转换为RTF支持的格式。
内容的提问来源于stack exchange,提问作者CSEE
相关产品推荐
相关产品推荐

