📄 vmlreport.java
字号:
this.rectReportHeight, "#000000");
String str = String.valueOf((int) this.valueMax);
int temp = Integer.parseInt(str.substring(0, 1));
temp++;
for (int i = 1; i < str.length(); i++) {
temp *= 10;
}
int count = temp * this.rectRowDistence / this.rectReportHeight;
// 锟斤拷锟斤拷锟\uFFFD
for (int i = 0; i < this.rectReportHeight / this.rectRowDistence; i++) {
int height = this.rectReportHeight - 10 - i * this.rectRowDistence;
prepareLine(handler, 60, height, width + 50, height, "#6699FF");
prepareLine(handler, 50, height, 60, height + 10, "#6699FF");
int y = height - this.rectRowDistence + 10;
prepareLine(handler, 30, y, 50, y, "#000000");
int top = height - this.rectRowDistence + 15;
String value = String.valueOf(count * (i + 1));
prepareTextbox(handler, top, 0, 45, 18, value, "right");
}
for (int i = 0; i < nameArray.length; i++) {
int left = this.rectReportWidth + this.rectReportDistence * i + 50;
int top = this.rectReportHeight - (int) valueArray[i]
* this.rectRowDistence / count;
prepareRectExtrusion(handler, top, left, colors[i % colors.length]);
int t = top - 30;
int l = left - this.rectReportDistence / 2 + 20;
String value = String.valueOf(valueArray[i]);
prepareTextbox(handler, t, l, 100, 18, value, "left");
t = this.rectReportHeight + 5;
l = left - this.rectReportDistence / 2 + 20;
int w = this.rectReportDistence;
prepareTextbox(handler, t, l, w, 100, nameArray[i], "left");
}
}
public void prepareRectRect(StringBuffer handler, int top, int left,
int width, int height) {
handler.append("<v:rect");
handler.append(" id=\"_x0000_s1026\"");
prepareAttribute(handler, "id", "_x0000_s1026");
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "-1");
prepareStyleAttribute(handler, "top", top);
prepareStyleAttribute(handler, "left", left);
prepareStyleAttribute(handler, "width", width);
prepareStyleAttribute(handler, "height", height);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "fillcolor", "#99ccff");
prepareAttribute(handler, "stroked", "f");
handler.append(">\n");
{
handler.append("\t<v:fill");
prepareAttribute(handler, "rotate", "t");
prepareAttribute(handler, "type", "gradient");
prepareAttribute(handler, "angle", "150");
prepareAttribute(handler, "focus", "100%");
handler.append("/>\n");
}
handler.append("</v:rect>\n\n");
}
public void prepareRectExtrusion(StringBuffer handler, int top, int left,
Color color) {
handler.append("\n<v:rect");
prepareAttribute(handler, "id", "_x0000_s1025");
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "1");
prepareStyleAttribute(handler, "top", top);
prepareStyleAttribute(handler, "left", left);
prepareStyleAttribute(handler, "width", 30);
prepareStyleAttribute(handler, "height", rectReportHeight - top);
prepareAttributeEnd(handler);
}
{
prepareAttributeBegin(handler, "fillcolor");
prepareRGBString(handler, color);
prepareAttributeEnd(handler);
}
handler.append(">\n");
{
handler.append("\t<v:fill");
prepareAttribute(handler, "rotate", "t");
prepareAttribute(handler, "type", "gradient");
{
prepareAttributeBegin(handler, "color2");
prepareToWhite(handler, color);
prepareAttributeEnd(handler);
}
handler.append("/>\n");
}
{
handler.append("\t<o:extrusion");
prepareAttribute(handler, "v:ext", "view");
prepareAttribute(handler, "on", "t");
prepareAttribute(handler, "backdepth", "25px");
{
prepareAttributeBegin(handler, "color");
prepareToBlack(handler, color);
prepareAttributeEnd(handler);
}
handler.append("/>\n");
}
handler.append("</v:rect>\n");
}
public void prepareVMLReportOval(StringBuffer handler) {
for (int i = 0, baseAngle = 0, tempAngle = 0; i < nameArray.length; i++, baseAngle += tempAngle) {
if (i == nameArray.length - 1) {
tempAngle = OVAL_ROUND_ANGLE * 10000 - baseAngle;
} else {
tempAngle = (int) (valueArray[i] * (OVAL_ROUND_ANGLE) / valueSum) * 10000;
}
Color color = colors[i % colors.length];
prepareOvalShape(handler, baseAngle, tempAngle, color);
double angle = (((baseAngle + tempAngle / 2) / 10000) * 2 * Math.PI)
/ OVAL_ROUND_ANGLE;
double x = this.ovalReportSize * Math.cos(angle) * 3 / 8;
double y = this.ovalReportSize * Math.sin(angle) * 3 / 8;
boolean leftSit = angle >= Math.PI / 2 && angle < Math.PI * 3 / 2;
prepareOvalPolyLine(handler, baseAngle, tempAngle, leftSit, x, y);
int top = (int) (this.ovalReportSize / 2 - y * 2 - 18)
+ ovalReportTop;
int left = (int) (this.ovalReportSize / 2 + x * 2) + ovalReportLeft;
if (leftSit) {
left -= 100;
}
prepareTextbox(handler, top, left, 150, 18, nameArray[i], "left");
prepareTextbox(handler, top + 20, left, 150, 18, String
.valueOf(valueArray[i]), "left");
}
}
private void prepareOvalShape(StringBuffer handler, int baseAngle,
int tempAngle, Color color) {
handler.append("<v:shape");
prepareAttribute(handler, "id", "_x0000_s1025");
{// style
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "-1");
prepareStyleAttribute(handler, "top", ovalReportTop);
prepareStyleAttribute(handler, "left", ovalReportLeft);
prepareStyleAttribute(handler, "width", this.ovalReportSize);
prepareStyleAttribute(handler, "height", this.ovalReportSize);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "coordsize", "1500,1400");
prepareAttribute(handler, "o:spt", "100");
{// fillcolor
prepareAttributeBegin(handler, "fillcolor");
prepareRGBString(handler, color);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "strokecolor", "white");
{// path
prepareAttributeBegin(handler, "path");
handler.append(" m750,700 ae750,700,750,700,");
handler.append(baseAngle);
handler.append(",");
handler.append(tempAngle);
handler.append(" x e");
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "adj", "0,,0");
handler.append(">\n");
{
handler.append("\t<v:fill");
prepareAttribute(handler, "rotate", "t");
prepareAttribute(handler, "type", "gradient");
{
prepareAttributeBegin(handler, "color2");
prepareToWhite(handler, color);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "focus", "100%");
handler.append("/>\n");
}
{
handler.append("\t<v:stroke");
handler.append(" joinstyle = \"round\"");
handler.append("/>\n");
}
{
handler.append("\t<v:formulas/>\n");
}
{
handler.append("\t<v:path");
handler.append(" o:connecttype = \"segments\"");
handler.append("/>\n");
}
handler.append("</v:shape>\n");
}
private void prepareOvalPolyLine(StringBuffer handler, int baseAngle,
int tempAngle, boolean leftSit, double x, double y) {
handler.append("<v:PolyLine");
prepareAttribute(handler, "filled", "false");
{
double len = this.ovalReportSize / 2;
prepareAttributeBegin(handler, "Points");
preparePoint(handler, (len + x) + ovalReportLeft, (len - y)
+ ovalReportTop);
x = len + x * 2 + ovalReportLeft;
y = len - y * 2 + ovalReportTop;
preparePoint(handler, x, y);
preparePoint(handler, leftSit ? x - 100 : x + 100, y);
prepareAttributeEnd(handler);
}
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "1");
prepareAttributeEnd(handler);
}
handler.append(">\n");
handler.append("\t<v:stroke");
prepareAttribute(handler, "StartArrow", "Oval");
handler.append("/>\n");
handler.append("</v:PolyLine>\n");
}
// /////////////////////////////////// public in this class
public void prepareLine(StringBuffer handler, int xFrom, int yFrom,
int xTo, int yTo, String color) {
handler.append("<v:line");
prepareAttribute(handler, "id", "_x0000_s1027");
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "-1");
prepareStyleAttribute(handler, "top", 0);
prepareStyleAttribute(handler, "left", 0);
prepareStyleAttribute(handler, "text-align", "left");
prepareStyleAttribute(handler, "flip", "y");
prepareAttributeEnd(handler);
}
{
prepareAttributeBegin(handler, "from");
preparePoint(handler, xFrom, yFrom);
prepareAttributeEnd(handler);
}
{
prepareAttributeBegin(handler, "to");
preparePoint(handler, xTo, yTo);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "strokecolor", color);
handler.append("/>\n");
}
private void prepareTextbox(StringBuffer handler, int top, int left,
int width, int height, String value, String align) {
handler.append("<v:shape");
prepareAttribute(handler, "id", "_x0000_s1025");
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "position", "absolute");
prepareStyleAttribute(handler, "z-index", "2");
prepareStyleAttribute(handler, "top", top);
prepareStyleAttribute(handler, "left", left);
prepareStyleAttribute(handler, "width", width);
prepareStyleAttribute(handler, "height", height);
prepareAttributeEnd(handler);
}
handler.append(">\n");
{
handler.append("\t<v:textbox");
{
prepareAttributeBegin(handler, "style");
prepareStyleAttribute(handler, "font-size", "12px");
prepareStyleAttribute(handler, "text-align", align);
prepareAttributeEnd(handler);
}
prepareAttribute(handler, "inset", "0,0,0,0");
handler.append(">");
handler.append(value);
handler.append("</v:textbox>\n");
}
handler.append("</v:shape>\n");
}
private void prepareAttribute(StringBuffer handler, String attribure,
String value) {
if (value == null || value.equals("")) {
return;
}
prepareAttributeBegin(handler, attribure);
handler.append(value);
prepareAttributeEnd(handler);
}
private void prepareAttributeBegin(StringBuffer handler, String attribure) {
handler.append(" ");
handler.append(attribure);
handler.append("=\"");
}
private void prepareStyleAttribute(StringBuffer handler, String attribure,
String value) {
if (value == null || value.equals("")) {
return;
}
handler.append(attribure);
handler.append(": ");
handler.append(value);
handler.append("; ");
}
private void prepareStyleAttribute(StringBuffer handler, String attribure,
double value) {
handler.append(attribure);
handler.append(": ");
handler.append(value);
handler.append("px; ");
}
private void preparePoint(StringBuffer handler, double x, double y) {
handler.append((int) x);
handler.append("px, ");
handler.append((int) y);
handler.append("px ");
}
private void prepareAttributeEnd(StringBuffer handler) {
handler.append("\"");
}
private void prepareRGBString(StringBuffer handler, Color color) {
handler.append("rgb(");
handler.append(color.getRed());
handler.append(", ");
handler.append(color.getGreen());
handler.append(", ");
handler.append(color.getBlue());
handler.append(")");
}
private void prepareToWhite(StringBuffer handler, Color color) {
int r = (255 + color.getRed()) / 2;
int g = (255 + color.getGreen()) / 2;
int b = (255 + color.getBlue()) / 2;
handler.append("rgb(");
handler.append(r);
handler.append(", ");
handler.append(g);
handler.append(", ");
handler.append(b);
handler.append(")");
}
private void prepareToBlack(StringBuffer handler, Color color) {
int r = (0 + color.getRed()) * 3 / 4;
int g = (0 + color.getGreen()) * 3 / 4;
int b = (0 + color.getBlue()) * 3 / 4;
handler.append("rgb(");
handler.append(r);
handler.append(", ");
handler.append(g);
handler.append(", ");
handler.append(b);
handler.append(")");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -