Activiti部署流程時圖片中文亂碼解決方法
一個流程定義會對應一個圖片資源,圖片可以由引擎自動生成,或者與流程定義一起部署(壓縮包方式),這樣引擎不再自動生成圖片資源,而是使用部署包中的圖片資源。是否生成圖片分為兩種情況:如果僅僅部署副檔名為bpmn或者bpmn20.xml的檔案會自動生成圖片;如果部署的是一個壓縮包,若壓縮包中不包含和流程定義同名的圖片檔案,則引擎同樣會自動生成圖片檔案。
部署完後通過檢視流程圖,發現圖片中的中文出現亂碼。導致亂碼的原因是字型庫的原因,因為Activiti引擎預設的字型名稱為“Arial”,而“Arial”不支援中文字元。故解決辦法如下:
方式1:由於Activiti生成圖片使用的是Awt(JDK中提供的畫圖元件),負責生成圖片的java類為“org.activiti.engine.impl.bpmn.diagram.ProcessDiagramCanvas”此類中有一行關鍵的程式碼為“Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE);”其中的activityFontName預設為"Arial"。這時只需要把預設的字型檔案改為作業系統中支援中文的字型檔名稱即可。故需要在activiti.cfg.xml配置檔案中加入如下配置資訊:
<bean id="processEngineConfiguration" class="org.activiti.xxx.XXXProcessEngineConfiguration">
<!-- 生成流程圖的字型 -->
<property name="activityFontName" value="宋體"></property>
<property name="labelFontName" value="宋體"></property>
</bean>
方式2:
部署流程定義的時候連帶著流程定義同名的圖片檔案一起打包部署即可。(推薦此方式)
如果只部署流程定義檔案,讓系統自動生成圖片的話,會有如下問題:
1、中文亂碼(上面方式1能解決)
2、自動生成的圖片會丟失座標資訊,導致後面流程圖片追蹤會有問題。(修改原始碼解決)
3、過長的文字會被擷取。(修改原始碼解決)