1. 程式人生 > >Activiti6 流程模型圖中文顯示為方塊□□

Activiti6 流程模型圖中文顯示為方塊□□

解決中文顯示問題

新增自定義類,繼承原有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();
    }
}