利用ProcessDiagramGenerator.generateDiagram方法可以生成当前活动用红色边框渲染的图片,但是执行后会有乱码的问题,这个主要是由于生成图片时的font造成的。
网上的解决方案有两种
一种是修改源码
另一种是在xml配置中添加字体配置
- <property name="activityFontName" value="${diagram.activityFontName}"/>
- <property name="labelFontName" value="${diagram.labelFontName}"/>
将这两个属性配置为宋体,但是在程序执行的时候还是会有问题
这是因为还需要将activiti的配置对象设置到Context对象中,activiti默认不会将其注入,具体看代码
ProcessDiagramCanvas这个类
- public ProcessDiagramCanvas(int width, int height) {
- this.canvasWidth = width;
- this.canvasHeight = height;
- //会从上下文获取,默认这个返回是空的 所以需要在自己的程序里手动设置进去
- //否则会取其默认值Arial
- if (Context.getProcessEngineConfiguration() != null) {
- this.activityFontName = Context.getProcessEngineConfiguration().getActivityFontName();
- }
- if (Context.getProcessEngineConfiguration() != null) {
- this.labelFontName = Context.getProcessEngineConfiguration().getLabelFontName();
- }
- this.processDiagram = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
- this.g = processDiagram.createGraphics();
- g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- g.setPaint(Color.black);
- Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE);
- g.setFont(font);
- this.fontMetrics = g.getFontMetrics();
- LABEL_FONT = new Font(labelFontName, Font.ITALIC, 10);
- }
所以在自己代码中要执行 Context.setProcessEngineConfiguration(processEngineConfiguration);这样才能彻底解决乱码的问题