在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流程图设置字体不生效的问题的更多相关文章

  1. 解决因为手机设置字体大小导致h5页面在webview中变形的BUG

    首先,我们做了一个H5页面,在各种手机浏览器中打开都没问题.我们采用了rem单位进行布局,通过JS来动态计算网页的视窗宽度,动态设置html的font-size,一切都比较完美. 这时候,你自信满满的 ...

  2. uwp - RichEditBox 解决设置字体样式后滚动条自动回滚顶部的问题

    原文:uwp - RichEditBox 解决设置字体样式后滚动条自动回滚顶部的问题 开发中碰到一个问题,当RichEditBox输入的文本达到一定行数的时候,滚动条此时位于底部,改变文本样式(如字体 ...

  3. iReport 开发和运行所用版本不一致导致设置字体大小不起作用

    问题:开发环境使用 Win10 + iReport 5.6 ,运行环境使用 Win10 + iReport 5.2 ,设置字体的大小不起作用. 解决方法:开发环境和运行环境一致,都使用 iReport ...

  4. 【转】CSS3的REM设置字体大小

    rem 长度单位   在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: ...

  5. CSS3的REM设置字体大小

    在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px v ...

  6. linux BASH shell设置字体与背景颜色

    linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色  echo -e "\e[31mtest\e[41m"  \e[30m 将字 ...

  7. [iOS开发] 使用第三方字体不生效

    iOS中使用第三方字体并不复杂,通常只需要如下三个步骤: 1. 将第三方字体文件添加到工程(Project)中: 2. 在info.plist中添加一个新的键"Fonts provided ...

  8. linux BASH shell下设置字体及背景颜色

    BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e ...

  9. iOS 设置字体样式

    1.iOS设置字体样式   label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24];   字体名如下: F ...

随机推荐

  1. DOM 表单应用

    1.大小写转换 <script> var a='aaa'; var b='AaA'; var c='BbB'; //alert(c.toLowerCase()); //把含有大写的字母转换 ...

  2. Quick-Cocos2d-x v3.3 异步加载Spine方案 转

    Quick-Cocos2d-x v3.3 异步加载Spine方案 浩月难求也与2015-03-25 15:06:3441 次阅读 背景 项目中使用了Quick-Cocos2d-x 3.3,由于Spin ...

  3. 常用的jquery

    获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $(&qu ...

  4. rpm 更新/升级 软件包(libGL-devel手动安装过程)

    rpm参数解释 -i 安装 -h 解压rpm的时候打印50个斜条 (#) -v 显示详细信息 升级命令rpm -Uvh rpm文件名 参数解释 -U 升级 -h 解压rpm的时候打印50个斜条 (#) ...

  5. ora-01033:oracle initialization or shutdown in progress 解决方法

    今天研究Oracle遇到了这个问题ora-01033:oracle initialization or shutdown in progress,经过分析研究终于解决了,写下来纪念一下.我的库是ora ...

  6. hdu 5476 Explore Track of Point(2015上海网络赛)

    题目链接:hdu 5476 今天和队友们搞出3道水题后就一直卡在这儿了,唉,真惨啊……看着被一名一名地挤出晋级名次,确实很不好受,这道恶心的几何题被我们3个搞了3.4个小时,我想到一半时发现样例输出是 ...

  7. html5移动端制作知识点总结

    一.测试工具:1.Chrome 2.Opera Mobile二.分辨率:一般现代手机最小320px,最大640px.三.全屏流体设计: 1.腾讯新闻:http://xw.qq.com/ 2.途牛旅游: ...

  8. POCO C++库学习和分析——任务

    1.任务的定义 任务虽然在Poco::Foundation库的目录中被单独划出来,其实可以被看成线程的应用,放在线程章节.首先来看一下Poco中对任务的描述: *task主要应用在GUI和Sever程 ...

  9. PHP 链式操作

    所谓链式操作最简单的理解就是 操作完毕之后再返回对象$this 想必大家工作中基本都快用烂了得东西. 下面就是一个链式操作MYSQL数据库类. 最常见的链式操作 每一个方法操作之后,返回一个对象,直到 ...

  10. 转:SQL的内连接与外连接

    参考:http://www.cuiyongjian.com/post-130.html 在oracle的SQL语句常用的连接有内连接(inner join),外连接(outer join)等,内连接又 ...