工作流引擎activiti5.16发布了,新版中将绘制流程图的部分独立了出来,在将其引入工程后出现了一些问题,发出来,大家参考,希望下一个版本的activiti能解决这些问题。
1,中文乱码问题
原有工程用的是
ProcessDiagramGenerator.generatePngDiagram(bpmnModel);
来直接输出png格式的InputStream,不用设置其他参数了,中文在启动时定义到了spring配置文件里
<!-- 生成流程图的字体 -->
<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>
可新版activit5.16这样不行了,中文乱码,研究了一下源码,发现居然不设置参数,直接调用png方法,字体就是默认的Arial字体,郁闷了半天,不想改原始程序,又找到个稍微麻烦点的方法
processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator()
.generateDiagram(bpmnModel, "png",
processEngine.getProcessEngineConfiguration().getActivityFontName(),
processEngine.getProcessEngineConfiguration().getLabelFontName(),
processEngine.getProcessEngineConfiguration().getClassLoader(),1.0);
这个里面主要是这两个参数起了作用
processEngine.getProcessEngineConfiguration().getActivityFontName()
processEngine.getProcessEngineConfiguration().getLabelFontName()
从启动的配置文件读取设定的字体,方法一下变的这么长,算不算是倒退?
2,个别图标出不来
原图是
3,图中的连接线名称显示错位(昨天发布的最新版5.16.3已经将这个问题解决了,不再错位)
原图是
所有的都会偏移,试过了多种输出,都不行,不知大家有什么办法没
4,超大流程图显示不完整
用的是缩略图,原图太大,这是原始流程
而生成的流程图就只有一半了,而且连接线名称全部错位,惨不忍睹啊。。。。。。
以上就是新版activiti5.16所遇到的绘图各种问题,总体来说,5.16版的绘图还有各种各样的问题,希望可以在下一个版本得到解决。
Context.setProcessEngineConfiguration(processEngine.getProcessEngineConfiguration());
InputStream imageStream = ProcessDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len;
while ((len = imageStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
......
List<TextLayout> layouts = new ArrayList<TextLayout>();
String lastLine = null;
......
if(currentHeight + height > boxHeight) {
// The line we're about to add should NOT be added anymore, append three dots to previous one instead
// to indicate more text is truncated
layouts.remove(layouts.size() - 1); //layouts中没有任何东西
if(lastLine.length() >= 4) { lastLine也为null
lastLine = lastLine.substring(0, lastLine.length() - 4) + "...";
}
layouts.add(new TextLayout(lastLine, g.getFont(), g.getFontRenderContext()));
} else {
layouts.add(layout);
lastLine = text.substring(previousPosition, measurer.getPosition());
currentHeight += height;
}
......
}
我看了源码发现是支持
<property name="activityFontName" value="Arial" />
<property name="labelFontName" value="Arial" />
设置的,
详见源码org.activiti.engine.ProcessEngineConfiguration的源码包含了
setActivityFontName方法和setLabelFontName方法
并且在org.activiti.engine.impl.bpmn.deployer.BpmnDeployer的源码中的
deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings)方法里是读取
ProcessEngineConfiguration中的字体样式的
详见:
byte[] diagramBytes = IoUtil.readInputStream(processEngineConfiguration.
getProcessDiagramGenerator().generateDiagram(bpmnParse.getBpmnModel(), "png", processEngineConfiguration.getActivityFontName(),
processEngineConfiguration.getLabelFontName(), processEngineConfiguration.getClassLoader()), null);
在但是修改了微软雅黑字体后在类DefaultProcessDiagramCanvas的drawMultilineText方法中出错!
引用来自“xueweiyema”的评论
带标记的流程图怎么解决呢,InputStream is = processengine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activiityIds)原先是这样输出的,可是我查不到generateDiagram这个函数对参数的定义
引用来自“细雨朦胧”的评论
带标记的可以这样: Inputstream is = processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activeActivityIds,Collections.emptyList(),processEngine.getProcessEngineConfiguration().getActivityFontName(), processEngine.getProcessEngineConfiguration().getLabelFontName(), processEngine.getProcessEngineConfiguration().getClassLoader(),1.0);引用来自“xueweiyema”的评论
带标记的流程图怎么解决呢,InputStream is = processengine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activiityIds)原先是这样输出的,可是我查不到generateDiagram这个函数对参数的定义
InputStream is = processengine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activiityIds)原先是这样输出的,可是我查不到generateDiagram这个函数对参数的定义