先贴上代码祭天
- 传统的生成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);