插件开发工具库,推荐依赖该工具库。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

110 lines
2.9 KiB

package com.fanruan.api.script;
import com.fr.general.IOUtils;
import com.fr.graph.g2d.canvas.CanvasPainter;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import java.io.InputStream;
import java.awt.image.BufferedImage;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2019-09-30
*/
public class FineCanvas {
CanvasPainter.Builder canvasBuilder;
/**
* 构造函数,创建js引擎并加载绘制使用的通用适配js文件
*/
public FineCanvas() throws Exception {
canvasBuilder = CanvasPainter.newDefaultBuilder();
}
/**
* 构造函数,创建js引擎并加载绘制使用的通用适配js文件,并加载指定的js文件
*
* @param filePath 指定的js文件路径的集合,使用相对路径即可。
*/
public FineCanvas(String... filePath) throws Exception {
canvasBuilder = CanvasPainter.newDefaultBuilder();
loadAndExecute(filePath);
}
/**
* 将js语句加载到缓存区。
*
* @param text js语句集合
*/
public void loadText(String... text) {
canvasBuilder.loadText(text);
}
/**
* 立即执行js语句
*
* @param text js语句集合
*/
public void loadTextAndExecute(String... text) throws Exception {
canvasBuilder.loadTextAndExecute(text);
}
/**
* 加载js文件
*
* @param filePath 指定的js文件路径的集合,使用相对路径即可。
*/
public void loadAndExecute(String... filePath) throws Exception {
for (String path : filePath) {
String content = readFileBody(path);
canvasBuilder.build().execute(content);
}
}
/**
* 执行缓存区的js语句,并返回canvas中的BufferedImage对象
*
* @return 绘制完成的图片对象
*/
public BufferedImage paint() throws Exception {
CanvasPainter painter = canvasBuilder.build();
try {
return painter.paint();
} catch (Exception ex) {
throw ex;
} finally {
painter.close();
}
}
/**
* 执行指定的js方法,并返回canvas中的BufferedImage对象
*
* @return 绘制完成的图片对象
*/
public BufferedImage paint(String functionName, Object... parameters) throws Exception {
CanvasPainter painter = canvasBuilder.build();
try {
return painter.paint(functionName, parameters);
} catch (Exception ex) {
throw ex;
} finally {
painter.close();
}
}
private String readFileBody(String filePath) {
InputStream in = FineCanvas.class.getResourceAsStream(filePath);
String script = StringUtils.EMPTY;
try {
script = IOUtils.inputStream2String(in);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return script;
}
}