当前位置: 首页 > news >正文

让博客园设置支持PlantUml画图

image

  1. 1. 引入
  2. 2. 博客园不支持plantuml渲染
  3. 3. 编写js脚本支持plantuml
  4. 4. 缺点

  ‍

1. 引入

  众所周知,我们在写博客的时候,常使用PlantUML 和 Mermaid绘制图表、流程图、架构图。这是因为用代码去画图,不怎么需要手动控制格式、对齐、间距等细节,只需要专注于逻辑结构和内容本身,工具会自动完成布局和渲染。就像我们写博客的时候,更加偏向于markdown而不是富文本,这样可以让我们专注于博客内容,而不是总在调整格式。

  博客园对与Mermaid支持原生渲染,例如:

‍```mermaid
sequenceDiagramparticipant User as 用户participant Frontend as 博客园前端participant Backend as 博客园后端participant DB as 数据库User->>Frontend: 登录并进入写博客页面Frontend->>User: 渲染编辑器界面User->>Frontend: 编写文章并点击“发布”Frontend->>Backend: 发送 POST /api/posts (含标题、内容)Backend->>DB: 保存文章数据DB-->>Backend: 保存成功Backend-->>Frontend: 返回成功响应Frontend-->>User: 显示“发布成功”提示
‍```

  渲染结果如下:

sequenceDiagramparticipant User as 用户participant Frontend as 博客园前端participant Backend as 博客园后端participant DB as 数据库User->>Frontend: 登录并进入写博客页面Frontend->>User: 渲染编辑器界面User->>Frontend: 编写文章并点击“发布”Frontend->>Backend: 发送 POST /api/posts (含标题、内容)Backend->>DB: 保存文章数据DB-->>Backend: 保存成功Backend-->>Frontend: 返回成功响应Frontend-->>User: 显示“发布成功”提示

  上述语法可以在博客园中进行原生渲染,very good。

2. 博客园不支持plantuml渲染

  但是如果使用如下的plantuml语法,博客园就会渲染失败

‍```plantuml
@startuml
actor 用户 as User
participant "博客园前端" as Frontend
participant "博客园后端" as Backend
database "数据库" as DBUser -> Frontend : 登录并进入写博客页面
Frontend --> User : 渲染编辑器
User -> Frontend : 编写文章,点击“发布”
Frontend -> Backend : POST /api/posts\n{title, content}
Backend -> DB : INSERT INTO posts(...)
DB --> Backend : OK
Backend --> Frontend : {success: true, id: 123}
Frontend --> User : 显示“发布成功”
@enduml
‍```

image

3. 编写js脚本支持plantuml

  plantuml进行渲染,有很多种方法,其中一种方法如下:

  • 官方提供 PlantUML Server :

    • 用户发送 PlantUML 文本(Base64 编码)
    • 服务端解析 → 调用 Graphviz → 返回 PNG/SVG
    • 例如:https://www.plantuml.com/plantuml/png/SoWkIImgAStDuNBAJrBGjLDmpCbCJbMmKiX8pSd9vt98pKi1IW80

image

  在博客园页脚html代码输入如下js脚本:

<script src="https://files.cnblogs.com/files/xiaohuiduan/plantuml-encoder.min.js"></script>
<script>
(function() {const format = 'svg'; // 可改为 'svg' 获得矢量图,png获得png图const server = 'https://www.plantuml.com/plantuml/' + format + '/';// 查找所有 ‍```plantuml 生成的代码块document.querySelectorAll('code.language-plantuml').forEach(codeEl => {const code = codeEl.textContent.trim();if (!code) return;try {const encoded = plantumlEncoder.encode(code);const img = document.createElement('img');img.src = server + encoded;img.alt = 'PlantUML Diagram';img.style.maxWidth = '100%';img.style.height = 'auto';img.style.display = 'block';img.style.margin = '1em auto';// 替换整个 <pre> 容器(因为 code 在 pre 里面)const preEl = codeEl.parentElement;if (preEl && preEl.tagName === 'PRE') {preEl.parentNode.replaceChild(img, preEl);} else {codeEl.parentNode.replaceChild(img, codeEl);}} catch (e) {console.error('PlantUML render error:', e, code);codeEl.style.color = 'red';codeEl.textContent = 'PlantUML 渲染失败: ' + (e.message || e);}});
})();
</script>

  最终便能够进行渲染了:

@startuml
actor 用户 as User
participant "博客园前端" as Frontend
participant "博客园后端" as Backend
database "数据库" as DBUser -> Frontend : 登录并进入写博客页面
Frontend --> User : 渲染编辑器
User -> Frontend : 编写文章,点击“发布”
Frontend -> Backend : POST /api/posts\n{title, content}
Backend -> DB : INSERT INTO posts(...)
DB --> Backend : OK
Backend --> Frontend : {success: true, id: 123}
Frontend --> User : 显示“发布成功”
@enduml

4. 缺点

  尽管上述方案可以让博客园支持插入plantuml语法,但是还是存在以下缺点:

  1. 如果plantuml程序字符过长,可能会渲染失败。
  2. plantuml server在国外,可能会因为网络等因素导致渲染失败。

  其实最好的方法就是博客园原生支持plantuml。

  Make cnblogs great again!

http://www.hskmm.com/?act=detail&tid=28588

相关文章:

  • 光谱相机的未来趋势 - 详解
  • Hall定理学习笔记
  • Vue3快速上手 - Ref
  • 象棋图片转FEN字符串详细教程
  • 面向对象抽象,接口多态综合-动物模拟系统
  • MinGW-即时入门-全-
  • 自然语言处理在风险识别中的应用
  • cat
  • qt everywhere souce code编译 - 实践
  • 2023 CCPC final G
  • 2025 年高可靠性测试设备/HALT/HASS/Halt/Hass/厂家制造商推荐榜:聚焦高效质量解决方案,助力企业产品升级
  • 八字手链人物传记计划——旭
  • 20232309 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 亚马逊发布基于Linux的Vega OS电视系统,禁止侧载应用
  • .net9.0 JWT AUTH2.0 添加身份认证授权
  • 扣子系列教程
  • 解决vscode中用npm报错
  • MATLAB复杂曲线曲面造型及导函数实现
  • 2025 年最新月嫂培训机构推荐榜单:短期 / 精英 / 金牌 / 高端月嫂培训及就业推荐,精选优质机构
  • OOP-实验一
  • 达梦使用jemalloc内存分配器
  • 2025 年深圳/龙岗/龙华/罗湖/南山/旧房翻新/出租房/二手房/老房/装修公司推荐:聚焦品质与服务,助您轻松焕新家
  • 2025 年中频炉厂商最新推荐排行榜权威发布,深度剖析应达电气等优质企业核心优势及选购要点节能/智能/自动化成套/高效率/智能感应加热中频炉厂家推荐
  • 2025 年气体/实验室/调压/气路/减压阀厂家推荐榜:聚焦安全与专业,助力各行业精准选品
  • 摸鱼混子回归 - ZERO
  • vue3实现抓拍并上传
  • 2025 年国内润滑油厂商最新推荐榜:聚焦优质品牌实力,助力企业精准选品润滑油净化/过滤/回用/液压油润滑油过滤厂商推荐
  • 纯前端实现项目过期
  • 基于形态学的权重自适应图像去噪的MATLAB实现
  • 2025 年油水分离器 / 气液分离器 / 液固分离器 / 水分离器 / 油分离器厂家推荐:西安同大技术沉淀与流体净化解决方案解析