kaka的gravatar头像
kaka2017-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)重启你的应用

分享到:

最近浏览
yzcan8月17日
最代码贡献等级说明
kluanlee8月17日
暂无贡献等级
v_yanbin8月14日
暂无贡献等级
暂无贡献等级
yaomignzi8月11日
暂无贡献等级
xa_zbl8月11日
最代码贡献等级说明
kildee8月10日
暂无贡献等级
151233860308月10日
最代码贡献等级说明
5130207728月10日
暂无贡献等级
fable0078月9日
暂无贡献等级
zuicoder8月9日
暂无贡献等级
kinggode8月8日
最代码贡献等级说明
kelvencheung8月8日
暂无贡献等级
sun52447258月7日
暂无贡献等级
jien0078月6日
最代码贡献等级说明
flylnb8月5日
暂无贡献等级
刘传彬8月4日
最代码贡献等级说明
wkshitc8月4日
最代码贡献等级说明
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友