解决中文显示问题
新增自定义类,继承原有DefaultProcessDiagramGenerator类,关键代码:
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.image.impl.DefaultProcessDiagramGenerator;
import java.awt.image.BufferedImage;
import java.util.List;
public class CustomProcessDiagramGenerator extends DefaultProcessDiagramGenerator {
protected String activityFontName = "宋体";
protected String labelFontName = "宋体";
protected String annotationFontName = "宋体";
public CustomProcessDiagramGenerator(final double scaleFactor){
super(scaleFactor);
}
public CustomProcessDiagramGenerator(){
super();
}
@Override
public BufferedImage generateImage(BpmnModel bpmnModel, String imageType,
List<String> highLightedActivities, List<String> highLightedFlows, double scaleFactor) {
return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, this.activityFontName, this.labelFontName, this.annotationFontName, null, scaleFactor);
}
}
图片生成器
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.image.ProcessDiagramGenerator;
import org.activiti.image.exception.ActivitiImageException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ImageGenerator {
public static BufferedImage createImage(BpmnModel bpmnModel) {
ProcessDiagramGenerator diagramGenerator = new CustomProcessDiagramGenerator();
BufferedImage diagramImage = diagramGenerator.generatePngImage(bpmnModel, 1.0);
return diagramImage;
}
public static BufferedImage createImage(BpmnModel bpmnModel, double scaleFactor) {
ProcessDiagramGenerator diagramGenerator = new CustomProcessDiagramGenerator(scaleFactor);
BufferedImage diagramImage = diagramGenerator.generatePngImage(bpmnModel, scaleFactor);
return diagramImage;
}
public static byte[] createByteArrayForImage(BufferedImage image, String imageType) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ImageIO.write(image, imageType, out);
} catch (IOException e) {
throw new ActivitiImageException("Error while generating byte array for process image", e);
} finally {
try {
if (out != null) {
out.close();
}
} catch(IOException ignore) {
// Exception is silently ignored
}
}
return out.toByteArray();
}
}