• Activiti 5.16 流程图高亮追踪 中文乱码问题解决方法


    最近研究activiti的高亮流程图,发现中文是乱码,为了让大家少走弯路共享出来。

    本文包含三个主要技术点:

    1、spring MVC架构下输出动态图片

    2、获得activiti流程图的stream流

    3、实现执行的任务高亮和中文无乱码

    首先修改activiti.cfg.xml文件

    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
              
              <!-- 配置数据源,和系统使用同一个数据源 -->
              <property name="dataSource" ref="dataSource" />
              <property name="databaseSchemaUpdate" value="true" />
              <property name="jobExecutorActivate" value="false" />
              
              <property name="transactionManager" ref="transactionManager" />
    <!-- 下面这两行是关于中文乱码的,不知道为什么选择微软雅黑不生效,可能和tomcat容器下找不到字库有关系,切忌,修改这里后还要修改java代码 -->
              <property name="activityFontName"  value="宋体" />
              <property name="labelFontName"  value="宋体" />
      </bean>

    然后是java代码

    @RequestMapping(value = "/taskImg", method = RequestMethod.GET)
        @ResponseBody
        protected String taskImg(
                HttpServletResponse response,
                @RequestParam(value = "processInstanceId", required = true) String processInstanceId)
                throws IOException {
    //根据流程定义ID获得流程实例
            ProcessInstance pi = this.engine.getRuntimeService()
                    .createProcessInstanceQuery()
            .processInstanceId(processInstanceId).singleResult();
            BpmnModel bpmnModel = this.engine.getRepositoryService().getBpmnModel(
                    pi.getProcessDefinitionId());
            
            // 得到正在执行的环节  
            List<String> activeIds = this.engine.getRuntimeService()
                    .getActiveActivityIds(pi.getId());
            DefaultProcessDiagramGenerator dpg = new DefaultProcessDiagramGenerator();
    //获得流程图的流对象,这里显示的加载了字体
            InputStream is = dpg.generateDiagram(bpmnModel, "png", activeIds,
                    Collections.<String> emptyList(), this.engine
                            .getProcessEngineConfiguration().getActivityFontName(),
                    this.engine.getProcessEngineConfiguration().getLabelFontName(),
                    null, 1.0);
        //输出流准备
            int readSize = 0;
            byte[] data = new byte[8192];
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    //每次读出8192字节
            while ((readSize = is.read(data, 0, data.length)) != -1) {
                buffer.write(data, 0, readSize);
            }
            is.close();//关闭原始流
    
    //根据response的输出流,即客户端流
            ServletOutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象
    
            toClient.write(buffer.toByteArray()); // 输出数据
            toClient.flush();
    //关闭输出流
            toClient.close();
            //图片流已经从response对象输出了,函数返回null就可以了
            return null;
        }
  • 相关阅读:
    oracle sql 优化大全
    MyBatis学习笔记
    Eclipse启动项目时,删除workspaces无用的工作区间
    java 中 BigDecimal 怎么与 0 比较
    Mybatis 异常: The content of elements must consist of well-formed character data or markup
    ODS与数据仓库
    MyBatis 缓存
    管理信息系统需求调研分析指南
    Merge Into 语句代替Insert/Update在Oracle中的应用实战
    Oracle数据库常用函数使用--持续更新中
  • 原文地址:https://www.cnblogs.com/liughost/p/4362830.html
Copyright © 2020-2023  润新知