Activiti 5.16 流程图片生成的各种问题

原创
2014/07/25 16:51
阅读数 4.7W

工作流引擎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版的绘图还有各种各样的问题,希望可以在下一个版本得到解决。


展开阅读全文
打赏
3
7 收藏
分享
加载中
// 使用spring注入引擎请使用下面的这行代码 *****很重要
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);
}
2017/06/23 14:58
回复
举报
5.19也是遇到这样的问题了,大神有好的解决方案吗
2016/02/29 23:29
回复
举报
activiti新版的api感觉变化很大呢
2015/08/12 21:39
回复
举报
15.17生成图片上的文字丢失,如何解决啊?
2015/05/07 17:46
回复
举报
protected void drawMultilineText(String text, int x, int y, int boxWidth, int boxHeight, boolean centered) {
......

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;
}
......
}
2014/09/10 16:25
回复
举报
楼主你好,我同样也是用的5.16的activiti
我看了源码发现是支持
<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方法中出错!
2014/09/10 16:20
回复
举报

引用来自“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);
processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram() 这个方法无法输出图片。 5.16中 BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); DefaultProcessDiagramGenerator dpg = new DefaultProcessDiagramGenerator(); imageStream =dpg.generateDiagram(bpmnModel, "png", activeActivityIds); 可以这样输出高亮节点的流程图 但是中问乱码···求解决方案··
2014/09/04 12:00
回复
举报
豆豆爹地博主

引用来自“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);
2014/08/13 18:06
回复
举报
带标记的流程图怎么解决呢,
InputStream is = processengine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(bpmnModel, "png", activiityIds)原先是这样输出的,可是我查不到generateDiagram这个函数对参数的定义
2014/08/13 17:02
回复
举报
同样的问题,木有解决,等解决方案...
2014/08/06 14:29
回复
举报
更多评论
打赏
10 评论
7 收藏
3
分享
返回顶部
顶部