java实现C4-PlantUML画图linux和windows作图结果不一致

java代码如下:

引入

<dependency>
    <groupId>net.sourceforge.plantuml</groupId>
    <artifactId>plantuml</artifactId>
    <version>1.2023.4</version>
</dependency>


代码实现:

public String getPictureSvg(String uml, FileFormat format) throws IOException {
    String svgCode;
    try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
        SourceStringReader sourceReader = new SourceStringReader(uml);
        sourceReader.outputImage(
                outputStream, new FileFormatOption(format));
        svgCode = outputStream.toString(StandardCharsets.UTF_8);
    }
    return svgCode;
}

根据uml代码使用java实现可以得到base64的字符串,使用字符串通过image/svg+xml格式返回给前端即可得到如下svg的图形

uml代码块:

@startuml
 !include <C4/C4_Container>
 LAYOUT_TOP_DOWN()
 AddElementTag("domain", $fontColor="#FF8000", $bgColor="#CEFAE7")

 AddRelTag("DashedLine", $textColor=$ARROW_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DashedLine())

 AddRelTag("DottedLine", $textColor=$ARROW_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DottedLine())

 title 小程序电商系统模板

 !include <logos/rocket-chat>

 !include <logos/java>

 !include <cloudinsight/java>

 !include <cloudinsight/java>

 !include <cloudinsight/mysql>

 System_Boundary("0725_1","小程序电商系统"){

   Container("0725_2","微信小程序","min","用户交互的小程序前端",$sprite=rocket-chat)

   Container("0725_3","订单微服务","Java、SpringCloud、Tomcat","下单、订单的业务逻辑",$sprite=java)

   Container("0725_4","商城微服务","Java、SpringCloud、Tomcat","商品浏览、详情的业务逻辑",$sprite=java)

   Container("0725_5","小程序微服务","Java、SpringCloud、Tomcat","微信授权、推送等业务逻辑",$sprite=java)

   Container("0725_6","数据库","mysql","RDBMS数据库",$sprite=mysql)

 }

 Person("0725_7","用户","小程序电商系统的潜在用户")

 System_Ext("0725_8","微信公众平台","提供用户授权、支付、推送等功能")

 System_Ext("0725_9","电商中台","提供商品中台、库存中台、物流中台、订单中台等中台能力")

 Rel("0725_2","0725_3","调用","https","")

 Rel("0725_2","0725_4","调用","https","")

 Rel("0725_3","0725_5","调用","rpc","")

 Rel("0725_4","0725_5","调用","rpc","")

 Rel("0725_5","0725_6","读/写","","")

 Rel_R("0725_7","0725_2","使用","","")

 Rel_U("0725_8","0725_7","交互","","")

 Rel_R("0725_4","0725_9","调用","rpc","")

 Rel("0725_5","0725_8","交互","https","")

 Rel("0725_3","0725_6","读/写","","")

 Rel("0725_4","0725_6","读/写","","")

 Rel("0725_3","0725_9","调用","rpc","")

 SHOW_LEGEND()
 @enduml

得到的结果:

 一切都是正常的,但是部署到linux系统会发现图形是这样的:

 C4图形设置的Rel_R(箭头指向右),Rel_U(箭头指向上)失效了,最后发现plantuml底层实际是通过graphviz渲染出来的

可以通过uml测试:

@startuml
 testdot
@enduml

得到windows系统的版本是

 而我部署的linux系统centos里graphviz版本是2.30.1

 由于graphviz版本的不同导致Rel_R,Rel_U失效,发现问题解决起来就简单了

重新打个镜像部署个高于2.38.0的即可,我这边使用的是2.46.0

graphviz-2.46.0.tar.zg下载包地址如下:

https://gitlab.com/graphviz/graphviz/-/package_files/6163716/download

下载其他版本可以在此地址下载:

Download | Graphviz

Dockefile如下:

FROM xxx.xxx.xx.xx/base/java-jdk11:v1.0.0(一个基础镜像)
ADD graphviz-2.46.0.tar.gz /usr/local/src
RUN cd /usr/local/src/graphviz-2.46.0 && ./configure && make && make install \
    && yum -y groupinstall fonts

重新打包镜像部署项目后就可以了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值