kaka的gravatar头像
kaka 2017-08-03 09:25:02
activit流程图轨迹追踪以及linux下字体问题

最近遇到流程图追踪的一些问题,记录如下:

(1).前端用ajax请求,后端以流的方式传送一直无法展示出带轨迹的流程图

(2).项目部署到linux上后,带中文字体的带轨迹的流程图无法展示出汉字。

1.流程轨迹追踪的关键代码如下

BASE64传值方式

public String getTracePicture(String processInstanceId,HttpServletResponse response) {

		// 获取历史流程实例
		HistoricProcessInstance processInstance = factory.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId( processInstanceId ).singleResult();
		// 获取流程图
		BpmnModel bpmnModel = factory.getRepositoryService().getBpmnModel( processInstance.getProcessDefinitionId() );
		processEngineConfiguration = processEngine.getProcessEngineConfiguration();
		Context.setProcessEngineConfiguration( (ProcessEngineConfigurationImpl)processEngineConfiguration );

		ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
		ProcessDefinitionEntity definitionEntity = ( ProcessDefinitionEntity )factory.getRepositoryService().getProcessDefinition( processInstance.getProcessDefinitionId() );

		List<HistoricActivityInstance> highLightedActivitList = factory.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId( processInstanceId ).orderByTenantId().desc()
				.list();
		// 高亮环节id集合
		List<String> highLightedActivitis = new ArrayList<String>();
		// 高亮线路id集合
		List<String> highLightedFlows = getHighLightedFlows( definitionEntity, highLightedActivitList );
		
		//获取当前节点高亮
		if(highLightedActivitList != null && highLightedActivitList.size() > 0 ){
			String activityId = highLightedActivitList.get(highLightedActivitList.size()-1).getActivityId();
			highLightedActivitis.add( activityId );
		}
		// 中文显示的是口口口,设置字体就好了
		InputStream imageStream = diagramGenerator.generateDiagram( bpmnModel, "png", highLightedActivitis, highLightedFlows, "宋体", "宋体", null, 1.0 );
		byte[] data = null;
		//读取图片字节数组
		try{
			data = new byte[imageStream.available()];
			imageStream.read(data);
			imageStream.close();
		}
		catch (IOException e){
			e.printStackTrace();
		}
		//对字节数组Base64编码
		BASE64Encoder encoder = new BASE64Encoder();
		return encoder.encode(data);
		
	}

上面是后端获取带轨迹流程图的核心方法,前端ajax请求,后端必须用Base64转码一次,然后将结果当做字符串发送给前端,才可以展示出来

前端请求方式如下:

activit流程图轨迹追踪以及linux下字体问题

 

流方式传输

public String getTracePicture(String processInstanceId,HttpServletResponse response) {

		// 获取历史流程实例
		HistoricProcessInstance processInstance = factory.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId( processInstanceId ).singleResult();
		// 获取流程图
		BpmnModel bpmnModel = factory.getRepositoryService().getBpmnModel( processInstance.getProcessDefinitionId() );
		processEngineConfiguration = processEngine.getProcessEngineConfiguration();
		Context.setProcessEngineConfiguration( (ProcessEngineConfigurationImpl)processEngineConfiguration );

		ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
		ProcessDefinitionEntity definitionEntity = ( ProcessDefinitionEntity )factory.getRepositoryService().getProcessDefinition( processInstance.getProcessDefinitionId() );

		List<HistoricActivityInstance> highLightedActivitList = factory.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId( processInstanceId ).orderByTenantId().desc()
				.list();
		// 高亮环节id集合
		List<String> highLightedActivitis = new ArrayList<String>();
		// 高亮线路id集合
		List<String> highLightedFlows = getHighLightedFlows( definitionEntity, highLightedActivitList );
		//获取所有节点高亮
		/*for( HistoricActivityInstance tempActivity : highLightedActivitList ) {
			String activityId = highLightedActivitList.get(highLightedActivitList.size()-1).getActivityId(); tempActivity.getActivityId();
			highLightedActivitis.add( activityId );
		}*/
		//获取当前节点高亮
		if(highLightedActivitList != null && highLightedActivitList.size() > 0 ){
			String activityId = highLightedActivitList.get(highLightedActivitList.size()-1).getActivityId();
			highLightedActivitis.add( activityId );
		}
		// 中文显示的是口口口,设置字体就好了
		InputStream imageStream = diagramGenerator.generateDiagram( bpmnModel, "png", highLightedActivitis, highLightedFlows, "宋体", "宋体", null, 1.0 );
		
		byte[] b = new byte[1024];
		int len;
		try{
			while( (len = imageStream.read(b,0,1024))!=-1){
				response.getOutputStream().write(b,0,len);
			}
		}catch (IOException e){
				e.printStackTrace();
		}
		return "success";
	}

前端请求方式:

activit流程图轨迹追踪以及linux下字体问题

2.流程追踪在linux服务器部署不展示中文字体

(1)将windows上的simsun.ttc字体拷贝一份

(2)进入linux系统的jre目录下的lib/fonts

(3)创建fallback目录:mkdir fallback

(4)将simsun.ttc字体拷贝到fallback目录下:cp simsun.ttc fallback/

(5)进入到fallback目录:cd fallback

(6)执行命令:mkfontscale

(7)执行命令:mkfontdir 

(8)重启你的应用


打赏
最近浏览
sun_ny_fu  LV1 2021年9月30日
wdqwweqq  LV1 2020年5月14日
helloworld254  LV1 2020年1月7日
super008  LV1 2019年11月8日
625810909 2018年1月30日
暂无贡献等级
taojava  LV3 2017年11月10日
hsz9747  LV4 2017年10月19日
203778513  LV9 2017年9月13日
branice  LV18 2017年9月3日
bkhacker  LV8 2017年8月22日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友