Activiti model生成png图片(解决中文不显示问题)

先贴上代码祭天

  • 传统的生成png图片的代码
@RequestMapping(value = "showmodelpicture")
    public void showModelPicture(HttpServletResponse response ,String modelId)throws Exception{
        ModelAndView mv=new ModelAndView();
        RepositoryService repositoryService=processEngine.getRepositoryService();

        Model modelData = processEngine.getRepositoryService().getModel(modelId);
        ObjectNode modelNode = null;
        try {
            modelNode = (ObjectNode) new ObjectMapper()
            .readTree(repositoryService.getModelEditorSource(modelData.getId()));
        } catch (IOException e) {
            e.printStackTrace();
        }
        BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
        ProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator();
        InputStream inputStream = processDiagramGenerator.generatePngDiagram(model);

        OutputStream out = response.getOutputStream();
        for (int b = -1; (b = inputStream.read()) != -1; ) {
            out.write(b);
        }
        out.close();
        inputStream.close();
    }
  • 我的生成png图片的代码
@RequestMapping(value = "showmodelpicture")
    public void showModelPicture(HttpServletResponse response ,String modelId)throws Exception{
        ModelAndView mv=new ModelAndView();
        RepositoryService repositoryService=processEngine.getRepositoryService();

        Model modelData = processEngine.getRepositoryService().getModel(modelId);
        ObjectNode modelNode = null;
        try {
            modelNode = (ObjectNode) new ObjectMapper()
            .readTree(repositoryService.getModelEditorSource(modelData.getId()));
        } catch (IOException e) {
            e.printStackTrace();
        }
        BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
        ProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator();
        InputStream inputStream = processDiagramGenerator.generateDiagram(model,
                "png",
                Collections.<String>emptyList(), Collections.<String>emptyList(),
                "WenQuanYi Micro Hei", "WenQuanYi Micro Hei",
                null, 1.0);

        OutputStream out = response.getOutputStream();
        for (int b = -1; (b = inputStream.read()) != -1; ) {
            out.write(b);
        }
        out.close();
        inputStream.close();
    }

原因

源码

在org.activiti.image.impl.DefaultProcessDiagramCanvas这个类中,将字体默认设置为Arial
我们调用另外的一个方法,将字体设置为WenQuanYi Micro Hei(微软雅黑)。

activiti源码如下:

    protected String activityFontName = "Arial";
    protected String labelFontName = "Arial";
    Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE);
    g.setFont(font);
    this.fontMetrics = g.getFontMetrics();
    LABEL_FONT = new Font(labelFontName, Font.ITALIC, 10);

转载请注明出处。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值