解决ACTIVITI流程图设置字体不生效的问题
在ACTIVITI 5.15的版本中,有一个设置流程图的字体配置。
配置如下:
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="${jdbc.dbType}" />
<property name="dbIdentityUsed" value="false" />
<property name="history" value="audit" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="idGenerator" ref="activitiIdGenerator" />
<property name="processDefinitionCache">
<bean class="com.hotent.bpmx.activiti.cache.ActivitiDefCache"></bean>
</property>
<property name="labelFontName" value="宋体"></property>
<property name="activityFontName" value="宋体"></property> </bean>
但是我通过代码生成流程图时,发现配置无效。
BpmnModel bpmnModel= repositoryService.getBpmnModel("流程定义ID");
InputStream inputStream= ProcessDiagramGenerator.generatePngDiagram(bpmnModel);
这样生成的流程图中是中文出现乱码。
跟踪了一下:
发现ProcessDiagramCanvas代码中的ProcessEngineConfiguration conf=Context.getProcessEngineConfiguration(); 这个配置为空,那么这个配置当然是无效的了。
如果单纯解决这个问题很好办直接修改代码:
protected String activityFontName = "宋体";
protected String labelFontName = "宋体";
就可以了。
但是需要我们需要解决的是为什么获取这个流程配置为空的问题,让流程配置文件生效。
分析原因:
为什么这个Context.getProcessEngineConfiguration();获取为空呢,这个是这样,这个需要有值的话,是需要经过activiti的拦截器的。
我使用上面代码生成的时候,那么他就不会经过他的拦截器了,那么这个获取的这个值一定为空。
解决方法:
我们让这个代码在流程引擎的拦截器下执行。
在activiti中可以使用命令的方式执行代码。
具体做法如下:
1.实现类让他注入commandExecutor。
public class BaseServiceImpl extends ServiceImpl implements InitializingBean {
@Resource
ProcessEngine processEngine;
@Override
public void afterPropertiesSet() throws Exception {
ProcessEngineImpl engine = (ProcessEngineImpl)processEngine;
this.setCommandExecutor(engine.getProcessEngineConfiguration().getCommandExecutor());
}
}
2.定义一个cmd生成流程图。
public class GenFlowImageCmd implements Command<InputStream> {
private String bpmnDefId="";
public GenFlowImageCmd(String bpmnDefId){
this.bpmnDefId=bpmnDefId;
}
@Override
public InputStream execute(CommandContext context) {
RepositoryService repositoryService=(RepositoryService) AppUtil.getBean("repositoryService");
BpmnModel bpmnModel= repositoryService.getBpmnModel(bpmnDefId);
InputStream inputStream= ProcessDiagramGenerator.generatePngDiagram(bpmnModel);
return inputStream;
}
}
3.调用这个cmd。
实现一个类继承BaseServiceImpl 。
public class FlowImageService extends BaseServiceImpl {
public InputStream getProcessImage(String bpmnDefId){
InputStream inputStream= this.commandExecutor.execute(new GenFlowImageCmd(bpmnDefId));
return inputStream;
}
}
在spring文件中配置这个service,这样再次调用生成代码,那么就可以读取到配置的数据了。
解决ACTIVITI流程图设置字体不生效的问题的更多相关文章
- 解决因为手机设置字体大小导致h5页面在webview中变形的BUG
首先,我们做了一个H5页面,在各种手机浏览器中打开都没问题.我们采用了rem单位进行布局,通过JS来动态计算网页的视窗宽度,动态设置html的font-size,一切都比较完美. 这时候,你自信满满的 ...
- uwp - RichEditBox 解决设置字体样式后滚动条自动回滚顶部的问题
原文:uwp - RichEditBox 解决设置字体样式后滚动条自动回滚顶部的问题 开发中碰到一个问题,当RichEditBox输入的文本达到一定行数的时候,滚动条此时位于底部,改变文本样式(如字体 ...
- iReport 开发和运行所用版本不一致导致设置字体大小不起作用
问题:开发环境使用 Win10 + iReport 5.6 ,运行环境使用 Win10 + iReport 5.2 ,设置字体的大小不起作用. 解决方法:开发环境和运行环境一致,都使用 iReport ...
- 【转】CSS3的REM设置字体大小
rem 长度单位 在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: ...
- CSS3的REM设置字体大小
在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px v ...
- linux BASH shell设置字体与背景颜色
linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字 ...
- [iOS开发] 使用第三方字体不生效
iOS中使用第三方字体并不复杂,通常只需要如下三个步骤: 1. 将第三方字体文件添加到工程(Project)中: 2. 在info.plist中添加一个新的键"Fonts provided ...
- linux BASH shell下设置字体及背景颜色
BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e ...
- iOS 设置字体样式
1.iOS设置字体样式 label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: F ...
随机推荐
- Phantomjs 在cmd命令行显示中文乱码
cmd命令行窗口显示中文乱码 cmd中文支持gbk编码 在js执行文件中加上(一般在最开始加) phantom.outputEncoding="gbk"; 这样乱码就正确了
- 转载java源代码阅读方法
刚才在论坛不经意间,看到有关源码阅读的),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言 ...
- E2 2014.07.01 更新日志
增加功能 完善功能 电话报修单,添加可以发短信通知客户和技术员选项 商品历程分析,增加按商品分类条件统计 修件库,增加可以按维修商条件过滤,以方便查询某维修商的返修件 维修中,备件转销售时,自动读 ...
- Java中ArrayList相关的5道面试题
本文参考了 <关于ArrayList的5道面试题 > 1.ArrayList的大小是如何自动增加的? 这个问题我想曾经debug过并且查看过arraylist源码的人都有印象,它的过程是: ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
- Java中HashMap案例
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class MapTest { pu ...
- Java编程思想学习笔记_4(异常机制,容器)
一.finally语句注意的细节: 当涉及到break和continue语句的时候,finally字句也会得到执行. public class Test7 { public static void m ...
- 修正ios h5上传图时的图片方向问题
.ios上传会在exif中带一个 Orientation的属性,这个属性在windows中不会生效,在ios浏览器中会生效,造成图片在windows资源管理器中与ios浏览器中方向不一致 为了用户 ...
- final运用于内部类访问局部变量
final运用于内部类访问局部变量 public void mRun( final String name){ new Runnable() { @Override public void run() ...
- Excel 、数据库 一言不合就转换 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/52280786 ***************************************** ...