illustrator插件-拼版功能开发-裁切标记-js脚本开发-ai插件

1.算法程序

  illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是裁切标记,开发一个裁切标记功能,源代码如下所示:

if (app.documents.length == 0) {
    alert("请先建立一个新文件", "错误");
    var myDoc = app.documents.add();
}
luRes = "dialog {alignChildren: 'fill', text: '裁切标记',margins:[8,8,8,8]\nall: Group { orientation: 'row',alignChildren: 'fill', \n    myType: Panel {text:'类型',alignChildren: 'right',orientation: 'column',bounds:[100,0,225,110],properties:{borderStyle:'sunken'},\n                  lineType: Group { orientation: 'row',  spacing:1,\n                               st: StaticText { text:'角线:' }, \n                             ddl: DropDownList {preferredSize: [54, 20] ,fontsize:3,properties:{items:['日式', '罗马','中式']}},\n                                          } \n                crossType: Group { orientation: 'row',  spacing:1,\n                              cb: Checkbox { text:'套准', value: true}, \n                             ddl: DropDownList {preferredSize: [54, 20],properties:{items:['带圆', '无圆']}},\n                                          } \n                          } \n    mySize: Panel {text:'角线设置',alignChildren: 'fill',orientation: 'column',bounds:[100,0,240,0],properties:{borderStyle:'sunken'},\n                        lineLen: Group { orientation: 'row',  \n                                    s: StaticText { text:'长度:' }, \n                                    e: EditText {text: 6 , preferredSize: [36, 20],active:true}, \n                                    s: StaticText { text:'毫米' }, \n                                              } \n                    lineBleed: Group { orientation: 'row', \n                                    s: StaticText { text:'出血:' }, \n                                    e: EditText { text:3, preferredSize: [36, 20] },\n                                    s: StaticText { text:'毫米' }, \n                                             } \n                  lineStroke: Group { orientation: 'row', \n                                    s: StaticText { text:'描边:' }, \n                                    e: EditText { text:0.25, preferredSize: [36, 20] },\n                                    s: StaticText { text:'点' }, \n                                             } \n                         }  \n           } \nall2: Group { orientation: 'row',alignChildren: 'fill',\n        checkboxes: Panel { text:'选项', orientation:'column', alignChildren:'left',properties:{borderStyle:'black'},\n                 cb1: Checkbox { text:'添加角线图层 ', value: true}, \n                 cb2: Checkbox { text:'添加色标名称', value: true}, \n                 cb3: Checkbox { text:'添加文档信息' , value: true}, \n                 cb6: Checkbox { text:'包含对象边宽' }, \n                 cb4: Checkbox { text:'添加色条框',  value: true}, \n                 cb5: Checkbox { text:'色条框线',alignment: 'center',  value: true}, \n                }\n    myBisector: Panel { text:'等分线',alignChildren: 'left',orientation: 'column',bounds:[100,0,240,0],properties:{borderStyle:'sunken'},\n                               cb: Checkbox {text:'使用', value: true}\n            myUse: Group { orientation: 'column',alignChildren: 'fill',\n                        myHor: Group { orientation: 'row', \n                                    s: StaticText { text:'水平数:' }, \n                                    e: EditText { text:2, preferredSize: [55, 20]},  } \n                      myHor2: Group { orientation: 'row', \n                                    s3: StaticText { text:'切线距:' }, \n                                    e2: EditText { text:6, preferredSize: [25, 20]},\n                                    s4: StaticText { text:'毫米' }, \n                                           } \n                        myVer: Group { orientation: 'row', \n                                    s: StaticText {text:'垂直数:' }, \n                                    e: EditText { text:4, preferredSize: [55, 20] },  } \n                     myVer2: Group { orientation: 'row',  \n                                    s3: StaticText { text:'切线距:' }, \n                                    e2: EditText { text:6, preferredSize: [25, 20]},\n                                    s4: StaticText { text:'毫米' }, \n                                            } \n                                  }\n                            }\n              }\nbuttonGroups: Group { orientation: 'row', alignment: 'center', \ncancelBtn: Button { text:'取消',properties:{name:'cancel'}}, \nokBtn: Button { text:'确定',properties:{name:'ok'}}, \n        }\n}";
var win = new Window(luRes);
win.all.myType.lineType.ddl.selection = win.all.myType.lineType.ddl.items[0];
win.all.myType.crossType.ddl.selection = win.all.myType.crossType.ddl.items[0];
selLine = win.all.myType.lineType.ddl.items[0];
selLine1 = win.all.myType.lineType.ddl.items[1];
selellipse = win.all.myType.crossType.ddl.items[0];
win.all.myType.crossType.cb.onClick = function() {
    win.all.myType.crossType.ddl.enabled = this.value;
};
win.all2.myBisector.cb.onClick = function() {
    win.all2.myBisector.myUse.enabled = this.value;
};
if (win.all2.myBisector.cb.value == true) {
    win.all2.myBisector.cb.notify()
}
win.all2.checkboxes.cb4.onClick = function() {
    win.all2.checkboxes.cb5.enabled = this.value;
};
win.center();
myReturn = win.show();
if (myReturn == true) {
    var docRef = app.activeDocument;
    var pointTomm = 2.83464566929134;
    var pw = 0;
    var ph = 0;
    var x = 0;
    var y = 0;
    var aiver = app.version;
    var fileNameLocation = 0;
    var pageNumberLocation = 0;
    var mCMYK = [setCMYKcolor(100, 0, 0, 0), setCMYKcolor(0, 100, 0, 0), setCMYKcolor(0, 0, 100, 0), setCMYKcolor(0, 0, 0, 100)];
    mCMYK.push(setCMYKcolor(100, 100, 0, 0), setCMYKcolor(100, 0, 100, 0), setCMYKcolor(0, 100, 100, 0), setCMYKcolor(0, 0, 0, 50));
    var colorBarSize = 5 * pointTomm;
    var regRoundSize = 3.6 * pointTomm;
    var myFont = textFonts.getByName("MicrosoftYaHei");
    var myFontSize = 9;
    var lineLen = eval(win.all.mySize.lineLen.e.text) * pointTomm;
    var lineBleed = eval(win.all.mySize.lineBleed.e.text) * pointTomm;
    var hBisector = eval(win.all2.myBisector.myUse.myHor.e.text);
    var vBisector = eval(win.all2.myBisector.myUse.myVer.e.text);
    var hBSpace = eval(win.all2.myBisector.myUse.myHor2.e2.text) * pointTomm;
    var vBSpace = eval(win.all2.myBisector.myUse.myVer2.e2.text) * pointTomm;
    var SW = eval(win.all.mySize.lineStroke.e.text);
    placeCropline = true;
    win.all2.checkboxes.cb1.value ? creatCropMarkLayer = true : creatCropMarkLayer = false;
    win.all2.myBisector.cb.value ? placeBisector = true : placeBisector = false;
    win.all2.checkboxes.cb2.value ? placeColorName = true : placeColorName = false;
    win.all2.checkboxes.cb3.value ? placeFileDateName = placePageSize = true : placeFileDateName = placePageSize = false;
    win.all.myType.crossType.cb.value ? placeRegMark = true : placeRegMark = false;
    win.all2.checkboxes.cb4.value ? placeColorBar = true : placeColorBar = false;
    win.all2.checkboxes.cb5.value ? colorBarStroked = true : colorBarStroked = false;
    if (lineLen <= 0 || lineBleed <= 0 || isNaN(lineLen) == true || isNaN(lineBleed) == true) {
        alert("输入的数值必须大于零!已自动更正为 长度:6mm 出血:3mm。", "错误");
        lineLen = 6 * pointTomm;
        lineBleed = 3 * pointTomm;
    }
    if (creatCropMarkLayer == true) {
        docRef.layers.add();
        docRef.layers[0].name = "角线图层";
    }
    if (docRef.selection.length > 0) {
        var sl = true;
        var obj = docRef.selection;
        var selVB = getBounds(obj);
        var docName = "文件名: " + docRef.name;
        pw = selVB[2] - selVB[0];
        ph = selVB[1] - selVB[3];
        x = selVB[0];
        y = selVB[3];
        for (var i = 0; i < obj.length; i += 1) {
            obj[i].selected = false;
        }
        setOpt();
    } else if (aiver.slice(0, 2) >= 14) {
        var ab = docRef.artboards.length - 1;
        if (ab >= 49) {
            alert("注意:页面数量超过 50 时需要较多的内存与较长的运行时间,请耐心等候。\n当出现 \"PARM\"错误时,请关掉一些不用的软件以释放可用内存!", "提示");
        }
        for (var j = 0; j <= ab; j += 1) {
            docRef.artboards.setActiveArtboardIndex(j);
            var artboardnumber = docRef.artboards.getActiveArtboardIndex() + 1;
            var docName = "文件名: " + docRef.name + "  页码: " + docRef.artboards.length + "-" + artboardnumber;
            pw = docRef.width;
            ph = docRef.height;
            x = docRef.cropBox[0];
            y = docRef.cropBox[1] - ph;
            setOpt();
        }
    } else {
        pw = docRef.width;
        ph = docRef.height;
        var docName = "文件名: " + docRef.name;
        setOpt();
    }
}

function setOpt() {
    regGroup = docRef.groupItems.add();
    textGroup = docRef.groupItems.add();
    colorBarGroup = docRef.groupItems.add();
    cropmark();
    if (placeColorName == true) {
        colorname();
    }
    if (placeColorBar == true) {
        colorBar();
    }
    if (placeBisector == true) {
        Bisector();
    }
    if (placeFileDateName == true) {
        filenameDate();
    }
    if (placeRegMark == true) {
        Regmark();
    }
    if (placePageSize == true) {
        pagesize();
    }
}

function setCMYKcolor(c, m, y, k) {
    var newCMYKcolor = new CMYKColor();
    newCMYKcolor.cyan = c;
    newCMYKcolor.magenta = m;
    newCMYKcolor.yellow = y;
    newCMYKcolor.black = k;
    return newCMYKcolor;
}

function filenameDate() {
    var today = new Date();
    var week = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    var thisDate = today.getFullYear() + "年" + today.getMonth() + 1 + "月" + today.getDate() + "日" + " " + week[today.getDay()];
    var textString = "文件名: " + docName + "  " + thisDate;
    var textRef = textGroup.textFrames.add();
    textRef.contents = docName + "  " + thisDate;
    textRef.textRange.characterAttributes.size = myFontSize;
    textRef.textRange.characterAttributes.textFont = myFont;
    textRef.textRange.characterAttributes.fillColor = docRef.swatches[1].color;
    textRef.top = (y - 2) - lineBleed;
    textRef.left = ((pw - textRef.width) - lineBleed) + x;
}

function colorname() {
    var textRef = textGroup.textFrames.add();
    textRef.contents = "青色(C) 洋红(M) 黄色(Y) 黑色(K)";
    textRef.textRange.characterAttributes.size = myFontSize;
    textRef.textRange.characterAttributes.textFont = myFont;
    textRef.top = (y - 2) - lineBleed;
    textRef.left = x + lineBleed;
    for (var i = 0; i <= 5; i += 1) {
        textRef.textRange.characters[i].characterAttributes.fillColor = mCMYK[0]
    }
    for (var i = 6; i <= 11; i += 1) {
        textRef.textRange.characters[i].characterAttributes.fillColor = mCMYK[1]
    }
    for (var i = 12; i <= 17; i += 1) {
        textRef.textRange.characters[i].characterAttributes.fillColor = mCMYK[2]
    }
    for (var i = 18; i <= 22; i += 1) {
        textRef.textRange.characters[i].characterAttributes.fillColor = mCMYK[3]
    }
}

function pagesize() {
    var sizeUnit = "MM";
    var sizeX = pw;
    var sizeY = ph;
    switch (docRef.rulerUnits) {
        case RulerUnits.Centimeters:
            sizeUnit = " 厘米";
            sizeX = Math.round(((pw / pointTomm) / 10) * 100) / 100;
            sizeY = Math.round(((ph / pointTomm) / 10) * 100) / 100;
            break;
        case RulerUnits.Inches:
            sizeUnit = " 英吋";
            sizeX = Math.round((pw / 72) * 100) / 100;
            sizeY = Math.round((ph / 72) * 100) / 100;
            break;
        case RulerUnits.Millimeters:
            sizeUnit = " 毫米";
            sizeX = Math.round(((pw / pointTomm) + 0.001) * 100) / 100;
            sizeY = Math.round(((ph / pointTomm) + 0.001) * 100) / 100;
            break;
        case RulerUnits.Points:
            sizeUnit = " 点";
            sizeX = Math.round(pw * 100) / 100;
            sizeY = Math.round(ph * 100) / 100;
            break;
        case RulerUnits.Pixels:
            sizeUnit = " 像素";
            sizeX = Math.round(pw * 100) / 100;
            sizeY = Math.round(ph * 100) / 100;
            break;
        case RulerUnits.Qs:
            sizeUnit = " Ha";
            sizeX = Math.round(pw * 141.111) / 100;
            sizeY = Math.round(ph * 141.111) / 100;
            break;
        default:

    }
    var textPageSize = textGroup.textFrames.add();
    textPageSize.contents = "尺寸: " + sizeX + "X" + sizeY + sizeUnit;
    textPageSize.textRange.characterAttributes.size = myFontSize;
    textPageSize.textRange.characterAttributes.textFont = myFont;
    textPageSize.textRange.characterAttributes.fillColor = docRef.swatches[1].color;
    textPageSize.position = [((x + pw) - lineBleed) - textPageSize.width, y + ph + textPageSize.height + lineBleed];
}

function cropmark() {
    var lineGroup = regGroup.groupItems.add();
    var myLine = {
        line: function(PTS) {
            var myLineSet = lineGroup.pathItems.add();
            myLineSet.setEntirePath(PTS);
            myLineSet.filled = false;
            myLineSet.stroked = true;
            myLineSet.strokeWidth = SW;
            myLineSet.strokeColor = docRef.swatches[1].color;
        }
    };
    if (win.all.myType.lineType.ddl.selection == selLine) {
        var PTS1 = [
            [0, lineLen + lineBleed],
            [lineLen, lineLen + lineBleed],
            [lineLen, 0]
        ];
        myLine.line(PTS1);
        var PTS2 = [
            [0, lineLen],
            [lineLen + lineBleed, lineLen],
            [lineLen + lineBleed, 0]
        ];
        myLine.line(PTS2);
    } else if (win.all.myType.lineType.ddl.selection == selLine1) {
        var PTS1 = [
            [0, lineLen + lineBleed],
            [lineLen, lineLen + lineBleed]
        ];
        myLine.line(PTS1);
        var PTS2 = [
            [lineLen + lineBleed, lineLen],
            [lineLen + lineBleed, 0]
        ];
        myLine.line(PTS2);
    } else {
        var PTS1 = [
            [0, lineLen + lineBleed],
            [lineLen, lineLen + lineBleed]
        ];
        myLine.line(PTS1);
        var PTS2 = [
            [0, lineLen],
            [lineLen + (lineBleed / 2), lineLen]
        ];
        myLine.line(PTS2);
        var PTS3 = [
            [lineLen + lineBleed, lineLen],
            [lineLen + lineBleed, 0]
        ];
        myLine.line(PTS3);
        var PTS4 = [
            [lineLen, lineLen + (lineBleed / 2)],
            [lineLen, 0]
        ];
        myLine.line(PTS4);
    }
    lineGroup.position = [-lineGroup.width + x, y];
    lineGroup2 = lineGroup.duplicate();
    lineGroup2.rotate(90);
    lineGroup2.left = lineGroup2.left + lineGroup2.width + pw;
    lineGroup3 = lineGroup.duplicate();
    lineGroup3.rotate(270);
    lineGroup3.top = lineGroup3.top + lineGroup3.height + ph;
    lineGroup4 = lineGroup2.duplicate();
    lineGroup4.rotate(90);
    lineGroup4.top = lineGroup4.top + lineGroup4.height + ph;
}

function Regmark() {
    var lineGroup = regGroup.groupItems.add();
    if (win.all.myType.crossType.ddl.selection == selellipse) {
        ellipse = lineGroup.pathItems.ellipse((regRoundSize / 2) + y, (-regRoundSize / 2) + x, regRoundSize, regRoundSize, false, true);
        with(ellipse) {
            filled = false;
            stroked = true;
            strokeWidth = SW;
            strokeColor = docRef.swatches[1].color;
        }
    }
    var myLine = {
        line: function(X1, Y1, X2, Y2) {
            var myLineSet = lineGroup.pathItems.add();
            myLineSet.setEntirePath([
                [X1, Y1],
                [X2, Y2]
            ]);
            myLineSet.filled = false;
            myLineSet.stroked = true;
            myLineSet.strokeWidth = SW;
            myLineSet.strokeColor = docRef.swatches[1].color;
        }
    };
    myLine.line((-lineLen / 2) + x, y, (lineLen / 2) + x, y);
    myLine.line(x, -(lineLen + lineBleed) + y, x, lineLen + lineBleed + y);
    lineGroup.position = [(-lineGroup.width - lineBleed) + x, ((ph + lineGroup.height) / 2) + y];
    lineGroup.duplicate().position = [pw + lineBleed + x, ((ph + lineGroup.height) / 2) + y];
    lineGroup.duplicate();
    lineGroup.rotate(90);
    lineGroup.position = [((pw - lineGroup.width) / 2) + x, -lineBleed + y];
    lineGroup.duplicate().position = [((pw - lineGroup.width) / 2) + x, ph + lineGroup.height + lineBleed + y];
}

function colorBar() {
    var rectangle = {
        bar: function(y, x, colorBarSize, fiColor, swColor) {
            var myRectangle = colorBarGroup.pathItems.rectangle(y, x, colorBarSize, colorBarSize);
            myRectangle.fillColor = fiColor;
            myRectangle.stroked = false;
            if (colorBarStroked == true) {
                myRectangle.strokeColor = swColor;
                myRectangle.strokeWidth = SW;
            }
        }
    };
    for (var i = 0; i <= 10; i += 1) {
        rectangle.bar(y + (i * colorBarSize) + colorBarSize + lineBleed, ((-colorBarSize - lineBleed) + x) - 1, colorBarSize, colorBarSize, setCMYKcolor(10 * i, 0, 0, 0), mCMYK[0]);
        rectangle.bar((((y + (i * colorBarSize)) - (10 * colorBarSize)) - lineBleed) + ph, ((-colorBarSize - lineBleed) + x) - 1, colorBarSize, colorBarSize, setCMYKcolor(0, 10 * i, 0, 0), mCMYK[1]);
        rectangle.bar((((y + (i * colorBarSize)) - (10 * colorBarSize)) - lineBleed) + ph, lineBleed + x + pw + 1, colorBarSize, colorBarSize, setCMYKcolor(0, 0, 10 * i, 0), mCMYK[2]);
        rectangle.bar(y + (i * colorBarSize) + colorBarSize + lineBleed, lineBleed + x + pw + 1, colorBarSize, colorBarSize, setCMYKcolor(0, 0, 0, 10 * i), mCMYK[3]);
    }
    for (var j = 0; j <= 7; j += 1) {
        rectangle.bar(y + ph + colorBarSize + lineBleed + 1, lineBleed + x + (j * colorBarSize), colorBarSize, colorBarSize, mCMYK[j], docRef.swatches[1].color)
    }
}

function Bisector() {
    var lineGroup = regGroup.groupItems.add();
    var myLine = {
        line: function(X1, Y1, X2, Y2) {
            var myLineSet = lineGroup.pathItems.add();
            myLineSet.setEntirePath([
                [X1, Y1],
                [X2, Y2]
            ]);
            myLineSet.filled = false;
            myLineSet.stroked = true;
            myLineSet.strokeWidth = SW;
            myLineSet.strokeColor = docRef.swatches[1].color;
        }
    };
    if (vBSpace == 0) {
        for (var vML = 1; vML < vBisector; vML += 1) {
            var vEquidistant = ph / vBisector;
            myLine.line((x - lineLen) - lineBleed, y + (vML * vEquidistant), x - lineBleed, y + (vML * vEquidistant));
            myLine.line(x + lineLen + lineBleed + pw, y + (vML * vEquidistant), x + lineBleed + pw, y + (vML * vEquidistant));
        }
    } else {
        for (var vML = 1; vML < vBisector; vML += 1) {
            var vEquidistant = (ph + vBSpace) / vBisector;
            myLine.line((x - lineLen) - lineBleed, y + (vML * vEquidistant), x - lineBleed, y + (vML * vEquidistant));
            myLine.line((x - lineLen) - lineBleed, (y - vBSpace) + (vML * vEquidistant), x - lineBleed, (y - vBSpace) + (vML * vEquidistant));
            myLine.line(x + lineLen + lineBleed + pw, y + (vML * vEquidistant), x + lineBleed + pw, y + (vML * vEquidistant));
            myLine.line(x + lineLen + lineBleed + pw, (y - vBSpace) + (vML * vEquidistant), x + lineBleed + pw, (y - vBSpace) + (vML * vEquidistant));
        }
    }
    if (hBSpace == 0) {
        for (var hML = 1; hML < hBisector; hML += 1) {
            var hEquidistant = pw / hBisector;
            myLine.line(x + (hML * hEquidistant), (y - lineLen) - lineBleed, x + (hML * hEquidistant), y - lineBleed);
            myLine.line(x + (hML * hEquidistant), y + ph + lineBleed + lineLen, x + (hML * hEquidistant), y + ph + lineBleed);
        }
    } else {
        for (var hML = 1; hML < hBisector; hML += 1) {
            var hEquidistant = (pw + hBSpace) / hBisector;
            myLine.line(x + (hML * hEquidistant), (y - lineLen) - lineBleed, x + (hML * hEquidistant), y - lineBleed);
            myLine.line(x + (hML * hEquidistant), y + ph + lineBleed + lineLen, x + (hML * hEquidistant), y + ph + lineBleed);
            myLine.line((x + (hML * hEquidistant)) - hBSpace, (y - lineLen) - lineBleed, (x + (hML * hEquidistant)) - hBSpace, y - lineBleed);
            myLine.line((x + (hML * hEquidistant)) - hBSpace, y + ph + lineBleed + lineLen, (x + (hML * hEquidistant)) - hBSpace, y + ph + lineBleed);
        }
    }
}

function getBounds(obj) {
    var selObj1 = new Array();
    var selObj2 = new Array();
    var vgb1 = new Array();
    var vgb2 = new Array();
    var n = obj.length;
    if (n > 0) {
        if (obj[0].typename == "GroupItem" && obj[0].clipped && obj[0].pageItems.length > 1) {
            clipObj = obj[0].pathItems[0].geometricBounds;
            vgb1 = clipObj;
        } else {
            selObj1 = obj[0];
            if (win.all2.checkboxes.cb6.value) {
                vgb1 = selObj1.visibleBounds;
            } else {
                vgb1 = selObj1.geometricBounds;
            }
        }
        if (n > 1) {
            for (var i = 1; i < n; i += 1) {
                selObj2 = obj[i];
                if (obj[i].typename == "GroupItem" && obj[i].clipped && obj[i].pageItems.length > 1) {
                    if (win.all2.checkboxes.cb6.value) {
                        vgb2 = obj[i].pathItems[0].visibleBounds;
                    } else {
                        vgb2 = obj[i].pathItems[0].geometricBounds;
                    }
                } else {
                    if (win.all2.checkboxes.cb6.value) {
                        vgb2 = selObj2.visibleBounds;
                    } else {
                        vgb2 = selObj2.geometricBounds;
                    }
                }
                if (vgb1[0] > vgb2[0]) {
                    vgb1[0] = vgb2[0]
                }
                if (vgb1[1] < vgb2[1]) {
                    vgb1[1] = vgb2[1]
                }
                if (vgb1[2] < vgb2[2]) {
                    vgb1[2] = vgb2[2]
                }
                if (vgb1[3] > vgb2[3]) {
                    vgb1[3] = vgb2[3]
                }
            }
        }
    }
    return vgb1;
}

2.文本转执行

  使用记事本或者notepad++等文本编辑器,将代码拷贝至文本文件,然后修改后缀名为js或者jsx,最后再illustrator软件菜单文件》脚本》其它脚本,选择脚本文件,点执行即可,也可以将脚本放在预设文件夹内,会显示再脚本下的二级子菜单。如下图所示:
在这里插入图片描述

3.作者答疑


  如有疑问,请留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值