linux 跟踪程序读写,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 highLightedActivitList = factory.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId( processInstanceId ).orderByTenantId().desc()

.list();

// 高亮环节id集合

List highLightedActivitis = new ArrayList();

// 高亮线路id集合

List 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转码一次,然后将结果当做字符串发送给前端,才可以展示出来

前端请求方式如下:

5f44669d9023f819b9cfa4031178418d.png

流方式传输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 highLightedActivitList = factory.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId( processInstanceId ).orderByTenantId().desc()

.list();

// 高亮环节id集合

List highLightedActivitis = new ArrayList();

// 高亮线路id集合

List 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";

}

前端请求方式:

5f44669d9023f819b9cfa4031178418d.png

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)重启你的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值