Activiti工作流在linux系統流程圖文字顯示亂碼

項目使用了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文件夾內後重啓服務器即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章