背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良)
效果如下:
1、定义 MyDefaultProcessDiagramCanvas
public class MyDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas {//设置高亮线的颜色 这里我设置成绿色protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN;public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) {super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader);}public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) {super(width, height, minX, minY, imageType);}/*** 画线颜色设置*/public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType,AssociationDirection associationDirection, boolean highLighted, double scaleFactor) {Paint originalPaint = g.getPaint();Stroke originalStroke = g.getStroke();g.setPaint(CONNECTION_COLOR);if (connectionType.equals("association")) {g.setStroke(ASSOCIATION_STROKE);} else if (highLighted) {//设置线的颜色g.setPaint(HIGHLIGHT_SEQUENCEFLOW_COLOR);g.setStroke(HIGHLIGHT_FLOW_STROKE);}for (int i = 1; i < xPoints.length; i++) {Integer sourceX = xPoints[i - 1];Integer sourceY = yPoints[i - 1];Integer targetX = xPoints[i];Integer targetY = yPoints[i];Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY);g.draw(line);}if (isDefault) {Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);drawDefaultSequenceFlowIndicator(line, scaleFactor);}if (conditional) {Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);drawConditionalSequenceFlowIndicator(line, scaleFactor);}if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) {Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]);drawArrowHead(line, scaleFactor);}if (associationDirection == AssociationDirection.BOTH) {Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]);drawArrowHead(line, scaleFactor);}g.setPaint(originalPaint);g.setStroke(originalStroke);}/*** 高亮节点设置*/public void drawHighLight(int x, int y, int width, int height) {Paint originalPaint = g.getPaint();Stroke originalStroke = g.getStroke();//设置高亮节点的颜色g.setPaint(HIGHLIGHT_COLOR);g.setStroke(THICK_TASK_BORDER_STROKE);RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20);g.draw(rect);g.setPaint(originalPaint);g.setStroke(originalStroke);}
2、定义一个 MyDefaultProcessDiagramGenerator
这里只是修改一下名称 把DefaultProcessDiagramGenerator的代码搬进去即可 然后把
DefaultProcessDiagramCanvas 改成 MyDefaultProcessDiagramCanvas 即可
public class MyDefaultProcessDiagramGenerator implements ProcessDiagramGenerator {}
3、生成图片
@Service
public class FlowProcessDiagramGenerator extends MyDefaultProcessDiagramGenerator {private static final String IMAGE_TYPE = "png";@Value("${flowable.activityFontName}")private String activityFontName;@Value("${flowable.labelFontName}")private String labelFontName;@Value("${flowable.annotationFontName}")private String annotationFontName;/*** 生成图片流** @param bpmnModel 模型* @param highLightedActivities 活动节点* @param highLightedFlows 高亮线* @return*/public InputStream generateDiagram(BpmnModel bpmnModel, List<String> highLightedActivities, List<String> highLightedFlows) {return generateDiagram(bpmnModel, IMAGE_TYPE, highLightedActivities,highLightedFlows, activityFontName, labelFontName, annotationFontName,null, 1.0, true);}
}