springboot和activiti导出流程图乱码的解决

问题解决:

  • 这些方法都没有问题,基本按照配置都可以解决乱码问题, 重要的来了,一定一定一定要注意:
  • 这些代码放到系统中,一定要重新部署流程,再查看或导出流程图片,并且一定要注意你的系统中是否有【宋体】或者其他字体。

这里直接上代码

// A code block
package com.ruoyi.web.core.config;



import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.context.annotation.Configuration;


/**
 * activiti 的配置
 * 
 * @author ren
 */
@Configuration
public class ActivitifontConfig implements ProcessEngineConfigurationConfigurer
{

    public ActivitifontConfig() {
        System.out.println("ActivitiConfig字体配置容器启动初始化完成");
    }
    /**
     * 解決工作流生成图片乱码问题 注:可以解决任务的乱码问题,但是箭头上的name名称不显示,有兴趣的可以进行百度,我百度的是要改源码,懒得弄了。  还有箭头条件的添加,也会出现相应的问题,有的博客说是加入条件必须使用排他网关
     *
     * @param processEngineConfiguration processEngineConfiguration
     */
    @Override
    public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
       //我没有宋体。可以百度怎样查看自己系统的字体
        processEngineConfiguration.setActivityFontName("STKaiti");
        processEngineConfiguration.setAnnotationFontName("STKaiti");
        processEngineConfiguration.setLabelFontName("STKaiti");
    }


}

代码参考别的博客。
这里是我的导出图片的代码

// A code block
    /**
     * 导出model的xml文件或者image 文件
     */
    @RequestMapping(value = "/exportXmlOrImage")
    public void exportXmlOrImage(@RequestParam("processId") String processId,@RequestParam("type") String type, HttpServletResponse response) {
        try {
            //根据流程实例id获取流程定义
            org.activiti.engine.repository.ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processId).singleResult();
            String resourceNmae = "";
            if (type.equals("image")){
                resourceNmae = processDefinition.getDiagramResourceName();
                InputStream resourceAsStream = null;
                resourceAsStream =repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),resourceNmae);
                byte[] b = new byte[1024];
                int len = -1;
                while ((len=resourceAsStream.read(b,0,1024))!=-1){
                    response.getOutputStream().write(b,0,len);
                }
            }else if(type.equals("xml")){//导出bpm
                resourceNmae = processDefinition.getResourceName();
                //根据processId 获取modelId
                String  modelId=processDefinitionService.getModelerById(processId);
                Model modelData = repositoryService.getModel(modelId);
                BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
                JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
                BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
                // 流程非空判断
                if (!CollectionUtils.isEmpty(bpmnModel.getProcesses())) {
                    BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
                    byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);

                    ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
                    String filename = bpmnModel.getMainProcess().getId() + ".bpmn";
                    response.setHeader("Content-Disposition", "attachment; filename=" + filename);
                    IOUtils.copy(in, response.getOutputStream());
                    response.flushBuffer();
                }
            }

        } catch (Exception e) {
            try {
                response.sendRedirect("process/definition/definition");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

这些方法都没有问题,基本按照配置都可以解决乱码问题,
重要的来了,一定一定一定要注意:

这些代码放到系统中,一定要重新部署流程,再查看或导出流程图片,并且一定要注意你的系统中是否有【宋体】或者其他字体。

反正我被这两个问题坑了一天。。

你可能感兴趣的:(springboot)