项目使用了Activiti工作流,在windows系统使用显示流程图正常,但是在正式的linux系统上发现流程图节点文字信息乱码显示!图片其实是用了api提供的图片流直接封装显示的。
核心部分代码如下:
public static InputStream getDiagram(String processInstanceId){
RuntimeService runtimeService = getRuntimeService();
RepositoryService repositoryService = getRepositoryService();
//查询流程实例
HistoryService historyService = getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
// .processInstanceId(processInstanceId).singleResult();
//查询流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult();
//获取BPMN模型对象
BpmnModel model = repositoryService.getBpmnModel(processDefinition.getId());
//定义使用宋体
String fontName = "宋体";
//获取流程实例当前的节点,需要高亮显示
List<String> currentActs = new ArrayList<String>();
if(!isFinished(processInstanceId)){
currentActs = runtimeService.getActiveActivityIds(processInstanceId);
}
//BPMN模型对象、图片类型、显示的节点
InputStream inputStream = processEngine
.getProcessEngineConfiguration()
.getProcessDiagramGenerator()
.generateDiagram(model, "png", currentActs, new ArrayList<String>(),
fontName, fontName, fontName, null, 1.0);
return inputStream;
}
原因最终判断是图片文字使用了宋体,但是linux系统中默认不包含宋体,所以系统在解析宋体的时候就乱码啦!!解决办法是将windows系统中的宋体安装到windows环境中国,具体是方法配置在jdk字体文件夹下,亲自验证可行!
在console里面输入echo $JAVA_HOME,获取到oracle jdk安装目录,然后在jre/lib/fonts目录下创建fallback目录,将C:\WINDOWS\Fonts\simsun.ttc拷贝到 /usr/java//jdk1.7.63/jre/lib/fonts/fallback文件夹内后重启服务器即可。