illustrator插件-拼版功能开发-一键拼版-js脚本开发-ai插件

1.算法程序

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

function makeup(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft) {
    var width = (docWidth - marginLeft) - marginRight;
    var height = (docHeight - marginTop) - marginBottom;
    var w = parseInt(width / objWidth);
    var h = parseInt(height / objHeight);
    var wd = (width - (w * objWidth)) / 2;
    var hd = (height - (h * objHeight)) / 2;
    return {
        top: marginTop + hd,
        left: marginLeft + wd,
        landscape: w,
        portrait: h
    };
}

function makeup2(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft) {
    var r1 = makeup(docWidth, docHeight, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft);
    var r2 = makeup(docHeight, docWidth, objWidth, objHeight, marginTop, marginRight, marginBottom, marginLeft);
    var x1 = r1.landscape * r1.portrait;
    var x2 = r2.landscape * r2.portrait;
    var r = null;
    if (x1 > x2) {
        r = r1;
        r.dir = 0;
    } else {
        r = r2;
        r.dir = 1;
    }
    return r;
}

function getDocTopLeft(doc) {
    var pos = doc.rulerOrigin;
    if (pos[0] != 0 || pos[1] != 0) {
        [doc.height + pos[1], pos[0]];
    }
    return [0, doc.height];
}

function drawLine(pObj, points) {
    var line = pObj.pathItems.add();
    line.stroked = true;
    line.filled = false;
    line.strokeWidth = 0.566929;
    var color = new CMYKColor();
    color.black = 100;
    color.cyan = 0;
    color.magenta = 0;
    color.yellow = 0;
    line.strokeColor = color;
    line.setEntirePath(points);
}

function matrixmakeup() {
    var doc = app.activeDocument;
    var obj = doc.selection[0];
    if (!obj) {
        alert("请选择需要自动排版的对象!");
        return;
    }
    var docWidth = doc.width;
    var docHeight = doc.height;
    var objWidth = obj.width;
    var objHeight = obj.height;
    var margin = 14.173225;
    var madeup = makeup2(docWidth, docHeight, objWidth, objHeight, margin, margin, margin, margin);
    var w = madeup.landscape;
    var h = madeup.portrait;
    var top = madeup.top;
    var left = madeup.left;
    var dir = madeup.dir;
    if (dir == 1) {

    }
    var docPos = getDocTopLeft(doc);
    var docLeft = docPos[0];
    var docTop = docPos[1];
    for (var widx = 0; widx < w; widx += 1) {
        for (var hidx = 0; hidx < h; hidx += 1) {
            var o = obj.duplicate(doc, ElementPlacement.PLACEATEND);
            o.position = [docLeft + left + (widx * objWidth), (docTop - top) - (hidx * objHeight)];
        }
    }
    var lines = doc.groupItems.add();
    var mm2 = 5.66929;
    var mm4 = 11.33858;
    for (var hidx = 0; hidx <= h; hidx += 1) {
        var a = (docLeft + left) - mm2;
        var b = a - mm4;
        var c = (docTop - top) - (hidx * objHeight);
        drawLine(lines, [
            [a, c],
            [b, c]
        ]);
        var a = docLeft + left + (w * objWidth) + mm2;
        var b = a + mm4;
        var c = (docTop - top) - (hidx * objHeight);
        drawLine(lines, [
            [a, c],
            [b, c]
        ]);
    }
    for (var widx = 0; widx <= w; widx += 1) {
        var a = (docTop - top) + mm2;
        var b = a + mm4;
        var c = docLeft + left + (widx * objWidth);
        drawLine(lines, [
            [c, a],
            [c, b]
        ]);
        var a = ((docTop - top) - (h * objHeight)) - mm2;
        var b = a - mm4;
        var c = docLeft + left + (widx * objWidth);
        drawLine(lines, [
            [c, a],
            [c, b]
        ]);
    }
    obj.remove();
    alert("横: " + w + " 纵: " + h + "    共计: " + (w * h));
}
matrixmakeup();

2.作者答疑


  如有疑问,请留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值