package api.chart;
import java.awt.Color;
import java.awt.Font;
import com.fr.base.CoreDecimalFormat;
import com.fr.base.Formula;
import com.fr.base.Style;
import com.fr.base.TextFormat;
import com.fr.base.background.ColorBackground;
import com.fr.base.background.GradientBackground;
import com.fr.base.present.FormulaPresent;
import com.fr.chart.base.AttrAlpha;
import com.fr.chart.base.AttrBackground;
import com.fr.chart.base.AttrBorder;
import com.fr.chart.base.AttrChangeConfig;
import com.fr.chart.base.AttrChangeType;
import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.base.TextAttr;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.ChartCommonCondition;
import com.fr.chart.chartdata.OneValueCDDefinition;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.ConditionCollection;
import com.fr.chart.chartglyph.GeneralInfo;
import com.fr.data.core.Compare;
import com.fr.data.impl.DBTableData;
import com.fr.data.impl.NameDatabaseConnection;
import com.fr.data.impl.NameTableData;
import com.fr.data.util.function.SumFunction;
import com.fr.general.FRFont;
import com.fr.io.TemplateWorkBookIO;
import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.js.ReportletHyperlink;
import com.fr.main.impl.WorkBook;
import com.fr.plugin.chart.PiePlot4VanChart;
import com.fr.plugin.chart.attr.VanChartLegend;
import com.fr.plugin.chart.attr.VanChartTitle;
import com.fr.plugin.chart.base.AttrBorderWithShape;
import com.fr.plugin.chart.base.AttrEffect;
import com.fr.plugin.chart.base.AttrFloatColor;
import com.fr.plugin.chart.base.AttrLabel;
import com.fr.plugin.chart.base.AttrLabelDetail;
import com.fr.plugin.chart.base.AttrTooltip;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.base.AttrTooltipRichText;
import com.fr.plugin.chart.base.ChartRoseType;
import com.fr.plugin.chart.base.FirstFunction;
import com.fr.plugin.chart.base.RefreshMoreLabel;
import com.fr.plugin.chart.base.TableFieldCollection;
import com.fr.plugin.chart.base.TableFieldDefinition;
import com.fr.plugin.chart.base.VanChartHtmlLabel;
import com.fr.plugin.chart.base.VanChartRadius;
import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSummaryValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat;
import com.fr.plugin.chart.marker.type.MarkerType;
import com.fr.plugin.chart.pie.attr.PieCategoryLabelContent;
import com.fr.plugin.chart.type.GradientType;
import com.fr.plugin.chart.type.RadiusType;
import com.fr.plugin.chart.type.TextAlign;
import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.Constants;
import api.ServerConnector;
/**
* 图表 - 饼图
*
* @author Administrator
*/
public class PieChart {
public static void main(String[] args) {
/*
* 图表容器
* 普通报表 ChartCollection
* 聚合报表 PolyChartBlock
* 决策报表 ChartEditor
*/
try {
ServerConnector.local();
WorkBook workbook = new WorkBook();
// 数据库查询
DBTableData db = new DBTableData(new NameDatabaseConnection("FRDemo"), "select * from 销量");
workbook.putTableData("ds1", db);
WorkSheet sheet = new WorkSheet();
ChartCollection cc = new ChartCollection();
cc.addNamedChart("饼图", getChart());
// 切换方式
AttrChangeConfig change = new AttrChangeConfig();
// 按钮
change.setChangeType(AttrChangeType.BUTTON);
change.setButtonColor(Color.BLUE);
change.setStyleAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 13)));
// 轮播
change.setChangeType(AttrChangeType.CAROUSEL);
change.setShowArrow(true);
change.setTimeInterval(5);
change.setCarouselColor(Color.GREEN);
// cc.setChangeConfigAttr(change);
sheet.addCellElement(new DefaultTemplateCellElement(0, 0, 8, 20, cc));
workbook.addReport(0, "图表", sheet);
TemplateWorkBookIO.writeTemplateWorkBook(workbook, "饼图.cpt");
} catch (Exception e) {
e.printStackTrace();
}
ServerConnector.disconnect();
}
public static VanChart getChart() {
/*
* 格式
* CoreDecimalFormat - 数字、货币、百分比、科学计数
* FineDateFormat - 日期、时间
* TextFormat - 文本
* 常规不设置
*/
// 值
AttrTooltipValueFormat valueFormat = new AttrTooltipValueFormat();
valueFormat.setEnable(true);
valueFormat.setFormat(new CoreDecimalFormat("#0"));
// 百分比
AttrTooltipPercentFormat percentFormat = new AttrTooltipPercentFormat();
percentFormat.setEnable(true);
percentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
// 分类名
AttrTooltipCategoryFormat categoryFormat = new AttrTooltipCategoryFormat();
categoryFormat.setEnable(true);
categoryFormat.setFormat(TextFormat.getInstance());
// 系列名
AttrTooltipSeriesFormat seriesFormat = new AttrTooltipSeriesFormat();
seriesFormat.setEnable(true);
seriesFormat.setFormat(TextFormat.getInstance());
// 变化百分比
AttrTooltipChangedPercentFormat changedPercentFormat = new AttrTooltipChangedPercentFormat();
changedPercentFormat.setEnable(true);
changedPercentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
// 变化值
AttrTooltipChangedValueFormat changedValueFormat = new AttrTooltipChangedValueFormat();
changedValueFormat.setEnable(true);
changedValueFormat.setFormat(new CoreDecimalFormat("#0"));
// 汇总值
AttrTooltipSummaryValueFormat summaryFormat = new AttrTooltipSummaryValueFormat();
summaryFormat.setEnable(true);
summaryFormat.setFormat(new CoreDecimalFormat("#0"));
//
/*
* 图表容器
* 设置 工具栏、缩放、主题、数据、标题、背景、动画、监控刷新
*/
VanChart chart = new VanChart();
/*
* 图表绘制类
* 设置 提示、标签、条件显示、图例、系列
*/
PiePlot4VanChart plot = new PiePlot4VanChart();
/*
* 类型
*/
plot.setRoseType(ChartRoseType.PIE_DIFFERENT_ARC);
/*
* 数据
*/
OneValueCDDefinition data = new OneValueCDDefinition();
// 数据集来源 - 数据集
data.setTableData(new NameTableData("ds1"));
// 分类
data.setCategoryName("销售员");
// 系列名使用 - 字段值
// 系列名
data.setSeriesColumnName("产品类型");
// 值
data.setValueColumnName("销量");
// 汇总方式
data.setDataFunction(new SumFunction());
/*
* // 系列名使用 - 字段名
* MoreNameCDDefinition data = new MoreNameCDDefinition();
* // 数据集
* data.setTableData(new NameTableData("ds1"));
* // 分类
* data.setCategoryName("销售员");
* data.setChartSummaryColumn(
* new ChartSummaryColumn[] { new ChartSummaryColumn("产品类型", "产品类型", new SumFunction()) });
*/
/*
* // 数据 - 数据集来源 - 单元格数据
* NormalReportDataDefinition data = new NormalReportDataDefinition();
* data.setCategoryName(new Formula("now()"));
* data.add(new SeriesDefinition("r11", "r12"));
* data.add(new SeriesDefinition("r21", "r22"));
*/
// 数据筛选 - 分类
// 只使用前有限条记录
data.setTopCate(3);
// 合并剩余项为其他
data.setDiscardOtherCate(false);
// 分类为空时,不显示该分类
data.setDiscardNullCate(true);
// 形态
data.setCategoryPresent(new FormulaPresent("concatenate($$$, '*')"));
// 数据筛选 - 系列
// 只使用前有限条记录
data.setTopSeries(3);
// 合并剩余项为其他
data.setDiscardOtherSeries(false);
// 分类为空时,不显示该系列
data.setDiscardNullSeries(true);
// 形态
data.setSeriesPresent(new FormulaPresent("$$$+1"));
chart.setFilterDefinition(data);
/*
* 样式
*/
// 样式 - 标题
VanChartTitle title = new VanChartTitle();
// 内容
title.setTextObject(new Formula("'title'"));
title.setUseHtml(false);
// 布局
title.setPosition(Constants.CENTER);
title.setFloating(false);
title.setFloatPercentX(10);
title.setFloatPercentY(10);
// 样式
TextAttr textAttr = title.getTextAttr();
textAttr.setPredefinedStyle(false);
textAttr.setFRFont(FRFont.getInstance("黑体", Font.BOLD, 15));
textAttr.setAlignText(Constants.CENTER);
textAttr.setFRFontColor(Color.GREEN);
textAttr.setPredefinedStyleName("淡雅");
// 背景
title.setAutoBackground(false);
title.setBackground(ColorBackground.getInstance(Color.GRAY));
title.setAlpha(0.7f);
title.setRoundBorder(true);
title.setRoundRadius(10);
// 显示策略
title.setLimitSize(true);
title.setMaxHeight(15);
chart.setTitle(title);
// 样式 - 图例
VanChartLegend legend = (VanChartLegend) plot.getLegend();
// 图例可见
legend.setLegendVisible(true);
// 布局
legend.setPosition(Constants.RIGHT_TOP);
legend.setFloating(false);
legend.setFloatPercentX(10);
legend.setFloatPercentY(10);
// 样式
textAttr = legend.getTextAttr();
textAttr.setFRFont(FRFont.getInstance("黑体", Font.BOLD, 14));
textAttr.setFRFontColor(Color.BLUE);
textAttr.setAlignText(Constants.RIGHT);
// 边框
legend.setBorderStyle(Constants.LINE_THIN);
legend.setBorderColor(Color.RED);
legend.setRoundBorder(true);
legend.setRoundRadius(10);
// 背景
legend.setAutoBackground(false);
legend.setBackground(new GradientBackground(Color.YELLOW, Color.RED, GradientBackground.LEFT2RIGHT));
legend.setAlpha(0.7f);
legend.setShadow(true);
// 显示策略
legend.setCustomSize(true);
legend.setMaxHeight(25);
legend.setHighlight(true);
// 样式 - 标签
AttrLabel label = new AttrLabel();
// 使用标签
label.setEnable(true);
// 样式 - 标签 - 值标签
AttrLabelDetail valueLabel = label.getAttrLabelDetail();
AttrTooltipContent tooltipContent = valueLabel.getContent();
// 通用
tooltipContent.setCustom(false);
tooltipContent.setCommon(true);
tooltipContent.setRichText(false);
tooltipContent.setSeriesFormat(seriesFormat);
tooltipContent.setValueFormat(valueFormat);
tooltipContent.setPercentFormat(percentFormat);
// 富文本
tooltipContent.setCustom(false);
tooltipContent.setCommon(false);
tooltipContent.setRichText(true);
String pname = "产品";
TableFieldCollection fields = new TableFieldCollection();
TableFieldDefinition field = new TableFieldDefinition();
field.setName(pname);
field.setFormat(TextFormat.getInstance());
FirstFunction f = new FirstFunction();
field.setDataFunction(f);
fields.addFieldDefinition(pname, field);
tooltipContent.setFieldCollection(fields);
AttrTooltipRichText richText = new AttrTooltipRichText();
richText.setAuto(true);
richText.setContent(
"<p><font color='red'><img alt='" + pname + "' data-id='${" + pname + "_" + pname.hashCode()
+ "}' class=\"rich-editor-param\" /></font></p>");
richText.setInitParamsContent(ChartConstants.VALUE_PARA);
tooltipContent.setRichTextAttr(richText);
tooltipContent.setRichTextAlign(TextAlign.CENTER);
tooltipContent.setRichTextSeriesFormat(seriesFormat);
tooltipContent.setRichTextValueFormat(valueFormat);
tooltipContent.setRichTextPercentFormat(percentFormat);
// 自定义
// tooltipContent.setCustom(true);
// tooltipContent.setCommon(false);
// tooltipContent.setRichText(false);
VanChartHtmlLabel html = new VanChartHtmlLabel();
html.setCustomHeight(false);
html.setHeight("60");
html.setCustomWidth(false);
html.setWidth("60");
html.setUseHtml(true);
html.setCustomText("function(){ return 123;}");
tooltipContent.setHtmlLabel(html);
valueLabel.setContent(tooltipContent);
// 样式
valueLabel.setCustom(true);
valueLabel.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.ITALIC, 13)));
// 位置
valueLabel.setPosition(Constants.OUTSIDE);
valueLabel.setShowGuidLine(true);
// 边框
AttrBorderWithShape border = new AttrBorderWithShape();
border.setBorderStyle(Constants.LINE_THICK);
border.setAutoColor(false);
border.setBorderColor(Color.RED);
border.setShape(MarkerType.MARKER_DIALOG);
border.setRoundBorder(true);
border.setRoundRadius(10);
valueLabel.setBorder(border);
// 背景
GeneralInfo gi = new GeneralInfo();
gi.setAutoBackground(false);
gi.setBackground(ColorBackground.getInstance(Color.gray));
// 不透明度
gi.setAlpha(.75f);
valueLabel.setBackground(gi);
// 样式 - 标签 - 分类标签
AttrLabelDetail categoryLabel = new AttrLabelDetail();
PieCategoryLabelContent categoryLabelContent = new PieCategoryLabelContent();
// 通用
categoryLabelContent.setCommon(true);
categoryLabelContent.setRichText(false);
categoryLabelContent.setCustom(false);
categoryLabelContent.setCategoryFormat(categoryFormat);
categoryLabelContent.setSummaryValueFormat(summaryFormat);
// 富文本
categoryLabelContent.setCommon(false);
categoryLabelContent.setRichText(true);
categoryLabelContent.setCustom(false);
richText = new AttrTooltipRichText();
richText.setAuto(true);
richText.setContent("<p><font color='black'><img alt='分类名' data-id='" + ChartConstants.CATEGORY_PARA
+ "' class=\"rich-editor-param\" /></font></p>");
richText.setInitParamsContent(ChartConstants.CATEGORY_PARA);
categoryLabelContent.setRichTextAttr(richText);
categoryLabelContent.setRichTextAlign(TextAlign.CENTER);
categoryLabelContent.setRichTextCategoryFormat(categoryFormat);
categoryLabelContent.setRichTextSummaryValueFormat(summaryFormat);
// 自定义
categoryLabelContent.setCommon(false);
categoryLabelContent.setRichText(false);
categoryLabelContent.setCustom(true);
html = new VanChartHtmlLabel();
html.setCustomHeight(false);
html.setHeight("60");
html.setCustomWidth(false);
html.setWidth("60");
html.setUseHtml(true);
html.setCustomText("function(){ return this.category;}");
categoryLabelContent.setHtmlLabel(html);
categoryLabelContent.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.ITALIC, 13)));
categoryLabel.setContent(categoryLabelContent);
categoryLabel.setPosition(Constants.TOP);
label.setGaugeValueLabelDetail(categoryLabel);
plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(label);
// 样式 - 系列
// 渐变风格
plot.getGradientStyle().setGradientType(GradientType.NONE);
// 配色方案
AttrFillStyle fillStyle = plot.getPlotFillStyle();
fillStyle.setCustomFillStyle(true);
fillStyle.setPredefinedStyle(false);
// COLOR_DEFAULT - 默认 COLOR_ACC - 自定义 COLOR_GRADIENT - 渐变色
fillStyle.setColorStyle(ChartConstants.COLOR_GRADIENT);
fillStyle.setColorList(java.util.Arrays.asList(new Color[] { Color.yellow, Color.red }));
// 样式
plot.setStartAngle(0);
plot.setEndAngle(270);
plot.setInnerRadiusPercent(30);
VanChartRadius radius = new VanChartRadius();
radius.setRadiusType(RadiusType.FIXED);
radius.setRadius(110);
plot.setRadius(radius);
plot.setSupportRotation(true);
// 边框 LINE_NONE、LINE_THIN、LINE_MEDIUM、LINE_THICK
AttrBorder attrBorder = new AttrBorder();
attrBorder.setAutoColor(false);
attrBorder.setBorderColor(Color.YELLOW);
attrBorder.setBorderStyle(Constants.LINE_THIN);
plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(attrBorder);
// 样式 - 背景
chart.setBackground(ColorBackground.getInstance(Color.GRAY));
// 边框 LINE_NONE、LINE_THIN、LINE_MEDIUM、LINE_THICK
chart.setBorderStyle(Constants.LINE_THICK);
chart.setBorderColor(Color.RED);
chart.setRoundBorder(true);
chart.setRoundRadius(10);
// 背景
chart.setAutoBackground(false);
chart.setBackground(ColorBackground.getInstance(Color.YELLOW));
chart.setAlpha(.75f);
chart.setShadow(true);
// 样式 - 提示
AttrTooltip tooltip = new AttrTooltip();
tooltip.setCustom(true);
// 使用数据点提示
tooltip.setEnable(true);
// 通用
tooltipContent = tooltip.getContent();
tooltipContent.setCommon(true);
tooltipContent.setValueFormat(valueFormat);
// 样式
tooltip.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 12)));
gi = tooltip.getGeneralInfo();
// 边框
gi.setBorderStyle(Constants.LINE_THICK);
gi.setBorderColor(Color.BLACK);
gi.setRoundBorder(true);
gi.setRoundRadius(10);
// 背景
gi.setBackground(ColorBackground.getInstance(Color.YELLOW));
gi.setAlpha(.7f);
gi.setShadow(false);
// 显示策略
tooltip.setFollowMouse(true);
plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(tooltip);
/*
* 特效
*/
// 特效 - 交互属性
VanChartTools tools = new VanChartTools();
// 工具栏
tools.setSort(true);
tools.setExport(true);
tools.setFullScreen(true);
tools.setHidden(false);
chart.setVanChartTools(tools);
// 动画
chart.setJSDraw(false);
// 监控刷新
RefreshMoreLabel refresh = new RefreshMoreLabel();
refresh.setMoreLabel(true);
plot.setAutoRefreshPerSecond(5);
refresh.setAutoTooltip(false);
tooltip = plot.getDefaultRefreshAttrTooltip();
tooltip.setEnable(true);
// 监控刷新 - 提示数据 - 通用
tooltip.setCustom(false);
tooltipContent = tooltip.getContent();
tooltipContent.setCommon(true);
tooltipContent.setCustom(false);
tooltipContent.setCategoryFormat(categoryFormat);
tooltipContent.setSeriesFormat(seriesFormat);
tooltipContent.setValueFormat(valueFormat);
tooltipContent.setChangedValueFormat(changedValueFormat);
tooltipContent.setPercentFormat(percentFormat);
tooltipContent.setChangedPercentFormat(changedPercentFormat);
// 监控刷新 - 提示数据 - 自定义
tooltipContent.setCustom(true);
tooltipContent.setCommon(false);
html = new VanChartHtmlLabel();
html.setCustomText("function(){ return 456;}");
html.setCustomHeight(true);
html.setCustomWidth(true);
html.setUseHtml(true);
tooltipContent.setHtmlLabel(html);
// 监控刷新 - 提示数据 - 样式
textAttr = new TextAttr(FRFont.getInstance("黑体", Font.ITALIC, 14));
textAttr.setAlignText(Style.HORIZONTALTEXT);
textAttr.setPredefinedStyle(false);
tooltipContent.setTextAttr(textAttr);
tooltip.setContent(tooltipContent);
// 监控刷新 - 提示数据 - 时间
tooltip.setDuration(4);
// 监控刷新 - 提示数据 - 边框
gi = new GeneralInfo();
gi.setBorderStyle(Constants.LINE_THIN);
gi.setBorderColor(Color.BLACK);
gi.setRoundBorder(true);
gi.setRoundRadius(15);
// 监控刷新 - 提示数据 - 背景
gi.setAutoBackground(false);
gi.setBackground(ColorBackground.getInstance(new Color(-1)));
gi.setAlpha(0.7f);
gi.setShadow(true);
tooltip.setGeneralInfo(gi);
refresh.setAttrTooltip(tooltip);
chart.setRefreshMoreLabel(refresh);
// 特效 - 交互属性 - 超级链接
NameJavaScriptGroup group = new NameJavaScriptGroup();
group.addNameHyperlink(new NameJavaScript("网络报表", new ReportletHyperlink("/WorkBook1.cpt", "_self")));
plot.setHotHyperLink(group);
// 特效 - 条件显示
ConditionCollection conds = plot.getConditionCollection();
ConditionAttr condAttr = new ConditionAttr();
condAttr.setName("条件属性1");
condAttr.setCondition(new ChartCommonCondition("CATEGORY_NAME", Compare.NOT_EQUAL, ""));
condAttr.addDataSeriesCondition(new AttrAlpha(.65f)); // 不透明度
condAttr.addDataSeriesCondition(new AttrBorder(Color.YELLOW, Constants.LINE_THIN)); // 边框
condAttr.addDataSeriesCondition(new AttrBackground(ColorBackground.getInstance(Color.GRAY))); // 配色
condAttr.addDataSeriesCondition(new AttrFloatColor()); // 悬浮颜色
condAttr.addDataSeriesCondition(new AttrLabel()); // 标签
condAttr.addDataSeriesCondition(new AttrEffect(2)); // 闪烁动画
condAttr.addDataSeriesCondition(new AttrTooltip()); // 数据点提示
conds.addConditionAttr(condAttr);
chart.setPlot(plot);
return chart;
}
}
图表 - 饼图
最新推荐文章于 2021-09-16 13:53:07 发布