PlantUML 导出后处理:从 SVG 到 PDF/PPT/Markdown 嵌入
PlantUML 默认只输出 SVG/PNG,但实际项目里要嵌进 PDF、PPT、Word、Notion、企业 wiki。这篇是各种导出格式的转换脚本、踩坑、性能取舍。
三种核心输出格式
1 | # 默认 SVG |
SVG 是默认且最佳——矢量,文字可选中,色深自由。PNG/PDF 是兼容性 fallback。
SVG 嵌入 Markdown
GitHub / GitLab
1 |  |
GitHub 直接渲染 SVG,矢量,放大不模糊。GitLab 同。
Hexo / Hugo(本地静态博客)
看 [plantuml-render-from-hexo] 那篇,推荐 hexo-renderer-plantuml 在 build 阶段预渲染。
Notion
Notion 不支持 SVG 直接上传,先转 PNG:
1 | plantuml -tpng -Sresolution=300 diagram.puml |
Sresolution=300 让 PNG 是 300 DPI,放大不糊。Notion 接受 PNG 后会再压缩一次,300 DPI 输出刚好。
Confluence
Confluence 接受 SVG 直接上传,但有时会强制转 PNG 显示。要在 macro 里嵌入原始 SVG:
1 | <ac:structured-macro ac:name="html"> |
SVG → PNG 高清导出
默认 -tpng 输出 96 DPI,放大模糊。提高分辨率:
1 | # 200 DPI |
批量脚本:
1 |
|
SVG → PDF 嵌入 LaTeX 论文
PlantUML 的 -tpdf 直接出 PDF,质量好。但:
- LaTeX
\includegraphics默认会裁剪 → 用width=\textwidth显式指定 - 字体可能跟论文正文不一致 → 用
-SdefaultFontName=Times强制衬线
1 | \begin{figure}[htbp] |
-tlatex 输出 TikZ 源码,可被论文直接 include,文字用论文字体。但 -tlatex 不支持所有 PlantUML 特性(复杂组件/部署图有时报错)。
SVG → PPT 演示文稿
PowerPoint 不支持 SVG,必须转 PNG:
1 | plantuml -tpng -Sresolution=300 diagram.puml |
自动 PPT 嵌入脚本(用 python-pptx):
1 | from pptx import Presentation |
字体一致性——PPT 用宋体/Calibri,PlantUML 默认 DejaVu Sans。导出后 PPT 里文字跟图里文字字体不一样。修法:
1 | plantuml -tpng -SdefaultFontName="Calibri" -SdefaultFontSize=14 diagram.puml |
嵌入 Word / Office 文档
Word 2016+ 支持 SVG 粘贴:复制 SVG 文件 → 在 Word 里 Ctrl+V → 自动粘贴为可缩放矢量图。
但 Word 默认渲染 SVG 用 IE 兼容模式,PlantUML 的某些 CSS3 特性可能不显示。保险做法:Word 里用 PNG,300 DPI:
1 | plantuml -tpng -Sresolution=300 diagram.puml |
SVG 优化(减小体积)
PlantUML 默认输出的 SVG 有大量元数据、注释、空元素。生产环境用 SVGO 压缩:
1 | npm install -g svgo |
压缩后体积减少 40-60%,但所有注释文字都被删——如果图里有 note left of Alice: remember 这种,压缩后渲染时不会显示。
保留注释的 svgo 配置(svgo.config.js):
1 | module.exports = { |
暗色模式适配
PlantUML 默认白色背景 + 黑色文字。博客有暗色模式时,SVG 不会自动适配。
修法:渲染两次,JS 根据 theme 切换:
1 | plantuml -tsvg -SbackgroundColor=transparent -Scolor=white diagram.puml # dark |
1 | <picture> |
prefers-color-scheme: dark 自动切换。比 CSS filter:invert 质量好得多(后者把蓝色翻转成橙色,很难看)。
性能:大批量导出
100+ 个 .puml,逐个起 Docker 容器很慢。并行:
1 | # GNU parallel |
xargs -P:
1 | ls docs/diagrams/*.puml | xargs -P 8 -I {} \ |
或者 用 plantuml-server 一波全发过去:
1 | PUML=$(cat diagram.puml | base64 -w0 | sed 's/+/-/g;s/\//_/g/') |
~1 是 plantuml.com 当前默认的 HUFFMAN 编码前缀(2025 之后改的)。
失败案例
- SVG 在 Outlook 邮件里不显示:Outlook Word 渲染引擎不识别 SVG。只能用 PNG,300 DPI。
- LaTeX
\includegraphics报 “File not found”:PlantUML PDF 输出需要字体嵌入,LaTeX 端要pdflatex才能吃 PDF。xelatex也可以。lualatex经常报字体错。 - Notion SVG 模糊:Notion 会把 SVG 缩放到固定尺寸,导出时加
width=100%让 SVG 自身响应式,别用固定 width。 - PPT 里图变形:python-pptx 默认按图片原始像素比缩放,可能跟 PPT 16:9 不匹配。手动设
width=Inches(9) height=Inches(6)。 - CI 渲染中文乱码:PlantUML 默认字体 DejaVu Sans 不含 CJK。服务器装
fonts-noto-cjk,plantuml 用-SdefaultFontName=Noto Sans CJK SC。
- 标题: PlantUML 导出后处理:从 SVG 到 PDF/PPT/Markdown 嵌入
- 作者: puml.online
- 创建于 : 2026-07-30 16:40:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-export-postprocessing/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。