运用flowable处理工作流时,难免会用到一个功能,就是查看流程图当前进展或者说走向,但是流程图输出到页面一直是乱码,有的大神说是字体问题,设置成宋体就好了:
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.flowable.spring.boot.EngineConfigurationConfigurer;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FlowableConfig implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
@Override
public void configure(SpringProcessEngineConfiguration engineConfiguration) {
engineConfiguration.setActivityFontName("宋体");
engineConfiguration.setLabelFontName("宋体");
engineConfiguration.setAnnotationFontName("宋体");
}
}
但是我的还是不行,尝试了很多方法,最后靠一个工具类操作输入输出流解决了
javax.imageio.ImageIO;
贴上代码,有遇到类似问题的可以参考:
/**
* 查看当前流程图已到达节点
* @param httpServletResponse
* @param processId 流程实例id
* @throws IOException
*/
@ApiOperation("查看流程图")
@GetMapping("/genProcessDiagrams")
public void genProcessDiagrams(HttpServletResponse httpServletResponse, String processId) throws IOException{
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();
//流程走完的不显示图
if (pi == null) {
return;
}
//获得活动的节点
List<HistoricActivityInstance> historyProcess = historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).orderByHistoricActivityInstanceStartTime().asc().list();
List<String> activityIds = new ArrayList<>();
List<String> flows = new ArrayList<>();
//获取流程图
BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
for (HistoricActivityInstance hi : historyProcess) {
String activityType = hi.getActivityType();
if (activityType.equals("sequenceFlow") || activityType.equals("exclusiveGateway")) {
flows.add(hi.getActivityId());
} else if (activityType.equals("userTask") || activityType.equals("startEvent")) {
activityIds.add(hi.getActivityId());
}
}
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processId).list();
for (Task task : tasks) {
activityIds.add(task.getTaskDefinitionKey());
}
ProcessEngineConfiguration engConf = processEngineConfiguration;
//定义流程画布生成器
ProcessDiagramGenerator processDiagramGenerator = engConf.getProcessDiagramGenerator();
InputStream in = processDiagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows, engConf.getActivityFontName()
, engConf.getLabelFontName(), engConf.getAnnotationFontName(), engConf.getClassLoader(), 1.0, true);
// 设置响应的类型格式为图片格式
httpServletResponse.setContentType("image/png");
//禁止图像缓存。
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setHeader("Cache-Control", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
OutputStream out = null;
byte[] buf = new byte[1024];
int legth = 0;
try {
out = httpServletResponse.getOutputStream();
BufferedImage buffImg = null;
buffImg = ImageIO.read(in);
ImageIO.write(buffImg, "png", out);
}catch (IOException e){
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}