Activiti6根据bpmn文件生成流程图

664 阅读1分钟

需求

根据上传的bpmn文件生成流程图,目前网上的资料全都是先将流程文件部署之后,然后才可以生成流程图,但是我们项目的需求是先根据bpmn文件生成流程图,确认流程图没有问题之后才能部署(避免失误传错bpmn文件的情况)。

问题分析

网上没有资料只能自己想办法,既然流程定义部署之后可以生成流程图,并且部署之后在数据库ACT_GE_BYTEARRAY表中发现了流程图文件,那么说明在部署操作时肯定是执行了流程图的生成操作,然后保存到数据库中了,那么只要分析下Activiti源码,看下是在哪一步执行了流程图的操作就可以了。根据分析发现关键得一步在于将bpmn文件转换为BpmnModel,有了BpmnModel 就可以调用generateDiagram方法生成流程图了

解决方案

环境

SpringBoot版本 2.1.0.RELEASE

activiti-spring-boot-starter-basic版本 6.0

flowable-image-generator版本 6.0.0

代码

/**
     * 根据流程定义文件生成流程图
     * @param file 流程定义文件
     * @param response
     * @throws IOException
     * @throws XMLStreamException
     */
    public void createFlowImage(MultipartFile file, HttpServletResponse response) throws IOException, XMLStreamException {
        InputStream inputStream = file.getInputStream();
        // 创建转换对象
        BpmnXMLConverter converter = new BpmnXMLConverter();

        // 创建XMLStreamReader读取XML资源
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(inputStream);

        // 把XML转换成BpmnModel对象
        BpmnModel bpmnModel = converter.convertToBpmnModel(reader);

// 使用默认配置获得流程图表生成器,并生成追踪图片字符流
        DefaultProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator();
        InputStream imageStream = processDiagramGenerator.generateDiagram(bpmnModel, "png",  "宋体", "微软雅黑", "黑体", null, 2.0);

        ServletOutputStream output = response.getOutputStream();
        IOUtils.copy(imageStream , output);

    }