您当前的位置: 首页 > 

插件开发

暂无认证

  • 2浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

illustrator插件-拼版功能开发-自动拼版-js脚本开发-ai插件

插件开发 发布时间:2022-03-16 07:22:40 ,浏览量:2

文章目录
    • 1.算法程序
    • 2.作者答疑

1.算法程序

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

if (app.documents.length == 0) {
    Mydoc = app.documents.add();
} else {
    Mydoc = app.activeDocument;
}

function MyfistDialog() {
    this.windowRef = null;
}
MyfistDialog.prototype.run = function() {
    var MyDocSelected = app.activeDocument.selection;
    if (MyDocSelected.length > 0) {
        var AutoX = Math.round((app.activeDocument.selection[0].width * 25.4) / 72, 2).toString();
        AutoY = Math.round((app.activeDocument.selection[0].height * 25.4) / 72, 2).toString();
        AutoXQty = Math.floor((Mydoc.width - 5) / app.activeDocument.selection[0].width).toString();
        AutoYQty = Math.floor((Mydoc.height - 5) / app.activeDocument.selection[0].height).toString();
    } else {
        AutoX = "0";
        AutoY = "0";
        AutoXQty = "1";
        AutoYQty = "1";
    }
    res = "dialog { \n\t\ttext: '自动拼版工具', \n\t\tmypnl: Panel { orientation:'column', alignChildren:['right', 'top'],\n\t\t\ttext: '拼版信息:', \n\t\t\tmyX: Group { orientation: 'row', \n\t\t\t\tst: StaticText { text:'成品水平尺寸' }, \n\t\t\t\tmyXSize: EditText { characters: 5,text:" + AutoX + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'mm      水平共拼' }, \n\t\t\t\tmyXQty : EditText { characters: 3,text:" + AutoXQty + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'个' }, \n\t\t\t}, \n\t\t\tmyY: Group { orientation: 'row', \n\t\t\t\tst: StaticText { text:'成品垂直尺寸' }, \n\t\t\t\tmyYSize: EditText { characters: 5,text:" + AutoY + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'mm      垂直共拼' }, \n\t\t\t\tmyYQty : EditText { characters: 3,text:" + AutoYQty + ", justify:'right' } \n\t\t\t\tst: StaticText { text:'个' }, \n\t\t\t}, \n\t\t}, \n\t\tmypnl2: Panel { orientation:'column', alignChildren:['right', 'top'],\n\t\t\ttext: '割线信息:(mm)', \n\t\t\tmyOther: Group { orientation: 'row', \n\t\t\tst: StaticText { text:'割线离成品' }, \n\t\t\tmyCropSpace : EditText { characters: 3,text:2, justify:'right' } \n\t\t\tst: StaticText { text:'割线长' }, \n\t\t\tmyCropLength : EditText { characters: 3,text:3, justify:'right' } \n\t\t\tst: StaticText { text:'成品间隙' }, \n\t\t\tmyBlood : EditText { characters: 3,text:0, justify:'right' } \n\t\t\t}, \n\t\t}, \n\t\tCheckboxs: Group { orientation: 'row', \n\t\t\tCheckContent: Checkbox { \n\t\t\t\torientation:'row', text:'带内容拼版     .', value:false \n\t\t\t}, \n\t\t\tCheckCutline: Checkbox { \n\t\t\t\torientation:'row', text:'自动加割线', value:true \n\t\t\t}, \n\t\t}, \n\t\tmypnl3: Group { orientation: 'row', \n\t\t\tst: StaticText { text:'注:水平与垂直尺寸需>0, 拼数需≥1,其它值需≥0' }, \n\t\t} \n\t\tbuttons: Group { orientation: 'row', \n\t\t\tcancelBtn: Button { text:'取消', properties:{name:'cancel'} } \n\t\t\tokBtn: Button { text:'确定', properties:{name:'ok'} }, \n\t\t} \n}";
    myDialog = new Window(res);
    this.windowRef = myDialog;
    myDialog.buttons.okBtn.onClick = function() {
        myXSizeV = (Number(myDialog.mypnl.myX.myXSize.text) * 72) / 25.4;
        myXQtyV = Math.round(Number(myDialog.mypnl.myX.myXQty.text));
        myYSizeV = (Number(myDialog.mypnl.myY.myYSize.text) * 72) / 25.4;
        myYQtyV = Math.round(Number(myDialog.mypnl.myY.myYQty.text));
        myCropSpaceV = (Number(myDialog.mypnl2.myOther.myCropSpace.text) * 72) / 25.4;
        myCropLengthV = (Number(myDialog.mypnl2.myOther.myCropLength.text) * 72) / 25.4;
        myBloodV = (Number(myDialog.mypnl2.myOther.myBlood.text) * 72) / 25.4;
        StartpositionX = 0;
        StartpositionY = 0;
        if (app.activeDocument.selection.length > 0) {
            StartpositionX = app.activeDocument.selection[0].position[0];
            StartpositionY = (app.activeDocument.selection[0].position[1] - ((myYSizeV + myBloodV) * myYQtyV)) + myBloodV;
        }
        var isInputOk = false;
        if (myXSizeV > 0 && myXQtyV >= 1 && myYSizeV > 0 && myYQtyV >= 1 && myCropSpaceV >= 0 && myCropLengthV >= 0 && myBloodV >= 0) {
            isInputOk = true;
        }
        if ((myXQtyV * myYQtyV) > 5000) {
            isInputOk = false;
        }
        if (isInputOk == true) {
            myDialog.close();
            if (myDialog.Checkboxs.CheckContent.value) {
                AutoCopy(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myBloodV, StartpositionX, StartpositionY);
            }
            if (myDialog.Checkboxs.CheckCutline.value) {
                AddCutline(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myCropSpaceV, myCropLengthV, myBloodV, StartpositionX, StartpositionY);
            }
        }
    };
    myDialog.buttons.cancelBtn.onClick = function() {
        myDialog.close();
    };
    myDialog.show();
    return true;
};
if (typeof MyfistDialog_unitTest == "undefined") {
    new MyfistDialog().run();
}

function AutoCopy(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myBloodV, StartpositionX, StartpositionY) {
    var MyDocSelected = app.activeDocument.selection;
    if (MyDocSelected.length > 0) {
        for (var v = 1; v  1) {
                            newItem = MyDocSelected[i].duplicate(app.activeDocument, ElementPlacement.PLACEATEND);
                            newItem.translate((myXSizeV + myBloodV) * (h - 1), -(myYSizeV + myBloodV) * (v - 1));
                        }
                    }
                } else {
                    MyDocSelected.selected = false;
                    newItem = MyDocSelected.parent.duplicate(app.activeDocument, ElementPlacement.PLACEATEND);
                    newItem.left += ((myXSizeV + myBloodV) * (h - 1));
                    newItem.top += (-(myYSizeV + myBloodV) * (v - 1));
                }
            }
        }
    }
}

function AddCutline(myXSizeV, myXQtyV, myYSizeV, myYQtyV, myCropSpaceV, myCropLengthV, myBloodV, StartpositionX, StartpositionY) {
    var MyDocSelected = app.activeDocument.selection;
    if (MyDocSelected.length > 0) {
        for (var v = 1; v  1) {

                        }
                    }
                } else {
                    MyDocSelected.selected = false;
                }
            }
        }
    }
    var cmykColor = new CMYKColor();
    cmykColor.cyan = 0;
    cmykColor.yellow = 0;
    cmykColor.magenta = 0;
    cmykColor.black = 100;
    var MyCutlineGroup = activeDocument.groupItems.add();
    if (myBloodV != 0) {
        for (var i = 0; i  0) {
                var MyTestPathBottom1 = MyCutlineGroup.pathItems.add();
                MyTestPathBottom1.setEntirePath(new Array(new Array((StartpositionX + ((myXSizeV + myBloodV) * i)) - myBloodV, StartpositionY - myCropSpaceV), new Array((StartpositionX + ((myXSizeV + myBloodV) * i)) - myBloodV, (StartpositionY - myCropSpaceV) - myCropLengthV)));
                MyTestPathBottom1.strokeColor = cmykColor;
                MyTestPathBottom1.stroked = true;
                MyTestPathBottom1.filled = false;
                MyTestPathBottom1.strokeWidth = 0.425196850393701;
                MyTestPathBottom1.selected = true;
                var MyTestPathUp1 = MyCutlineGroup.pathItems.add();
                MyTestPathUp1 = MyTestPathBottom1.duplicate();
                MyTestPathUp1.top += (((myYSizeV + myBloodV) * myYQtyV) - myBloodV) + (myCropSpaceV * 2) + myCropLengthV;
                MyTestPathUp1.strokeColor = cmykColor;
                MyTestPathUp1.stroked = true;
                MyTestPathUp1.filled = false;
                MyTestPathUp1.strokeWidth = 0.425196850393701;
                MyTestPathUp1.selected = true;
            }
            if (i             
关注
打赏
1665481431
查看更多评论
0.0399s