在activiti的开发过程当中,要用到查看流程图,网络上面有说能够再部署的时候把xml和jpg一块儿打包这样就能够防止坐标错位等问题,因为我是直接用modeler设计部署,用到的代码是: java
<span style="white-space:pre"> </span>DefaultProcessDiagramGenerator dpg = new DefaultProcessDiagramGenerator(); is = dpg.generateDiagram(bpmnModel, "png", activitiIds,flowIds);
可是发现查看的图形在直线的label上面显示出现了问题,个人activiti是5.16.1, 网络
第一点:自带modeler设计的不会有 字体
<bpmndi:BPMNLabel>
<omgdc:Bounds height="14.0" width="24.0" x="492.0" y="263.0"></omgdc:Bounds>
</bpmndi:BPMNLabel> spa
因此显示没有东西 插件
要是用Eclipse的插件设计就会有这个标签,可是显示也是错位,为了解决这个问题,只好修改源代码,查看源代码:activiti-image-generator-5.16.1是这个jar包 设计
DefaultProcessDiagramGenerator code
564行存在逻辑bug,判断非空状况下应该不须要去获取连线的中间点,直接使用设置的label坐标,因此这里作一个修改 xml
if (labelGraphicInfo != null) { GraphicInfo lineCenter = getLineCenter(graphicInfoList); processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); }改为 没有设置label的时候用连线的中间点作坐标,有设置就直接用设置的,这样也能够防止modeler设计的没有label标签也能正常显示了
if (labelGraphicInfo == null) { GraphicInfo lineCenter = getLineCenter(graphicInfoList); processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); }else{ processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); }
1118行//这里获取的y我看来5.14的jar包这里也是用了x的坐标,因此这里也作一个修改 ip
double tY = graphicInfo.getY(); 修改为x 原来的获取y错误
改为 double tY = graphicInfo.getX();
LABEL_FONT = new Font(labelFontName, Font.BOLD, 12);//改为粗体更明显