盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

Activiti自定义生成图片实现

Activiti 分享牛 8349℃
在实际的项目开发中,如果觉得Activiti生成的图片不美观?这个时候该怎么做呢?相信这也是很多开发人员所面临的问题。本文的讲解基于扩展DefaultProcessDiagramGenerator类
其实现思路如下:
  • 重写DefaultProcessDiagramCanvas类,该类中的initialize方法负责图片资源的加载。
  • 重写DefaultProcessDiagramGenerator类,然后使用自定义的HMProcessDiagramCanvas类

重写DefaultProcessDiagramCanvas类,代码如下:

public class HMProcessDiagramCanvas extends DefaultProcessDiagramCanvas
public void initialize(String imageType) {
		if ("png".equalsIgnoreCase(imageType)) {
			this.processDiagram = new BufferedImage(canvasWidth, canvasHeight,
					BufferedImage.TYPE_INT_ARGB);
		} else {
			this.processDiagram = new BufferedImage(canvasWidth, canvasHeight,
					BufferedImage.TYPE_INT_RGB);
		}

		this.g = processDiagram.createGraphics();
		if ("png".equalsIgnoreCase(imageType) == false) {
			this.g.setBackground(new Color(255, 255, 255, 0));
			this.g.clearRect(0, 0, canvasWidth, canvasHeight);
		}

		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		g.setPaint(Color.black);

		Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE);
		g.setFont(font);
		this.fontMetrics = g.getFontMetrics();

		LABEL_FONT = new Font(labelFontName, Font.ITALIC, 10);
		ANNOTATION_FONT = new Font(annotationFontName, Font.PLAIN, FONT_SIZE);

		try {
			USERTASK_IMAGE = ImageIO.read(ReflectUtil.getResource(
					"com/shareniu/chapter18/image/3.png", customClassLoader));
核心点在于重写initialize方法中的图片资源地址。
重写DefaultProcessDiagramCanvas类,代码如下:
public class HMProcessDiagramGenerator extends DefaultProcessDiagramGenerator
protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(
			BpmnModel bpmnModel, String imageType, String activityFontName,
			String labelFontName, String annotationFontName,
			ClassLoader customClassLoader) {
//将父类中的方法拷贝到这里即可。
		return new HMProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10,
				(int) minX, (int) minY, imageType);
	}
测试:
@Test
	public void getBpmnModel() {
		BpmnModel bpmnModel =   repositoryService.getBpmnModel("myProcess:1:4");
        List  activeActivityIds = new ArrayList<>(0);
        List highLightedFlows=new ArrayList<>(0);
        InputStream in = new HMProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activeActivityIds,
                highLightedFlows,"宋体","宋体","宋体",null, 1.0);
        System.out.println(in);
		FileOutputStream fw=null;  
        try{  
             fw=new FileOutputStream("D:/zxn.jpg");  
             byte[] buf=new byte[1024];  
             int len=0;  
             while((len=in.read(buf))!=-1){   //将byte数据读到最多buf长度的buf数组中   
                 fw.write(buf,0,len);         //将buf中 从0-len长度的数据写到文件中   
             }  
        }  
         catch(IOException e){  
             System.out.println("输入错误");  
         }  
	}

 

转载请注明:分享牛 » Activiti自定义生成图片实现