您当前的位置: 首页 > 

插件开发

暂无认证

  • 6浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

illustrator插件-常用功能开发-打开多页PDF-js脚本开发-AI插件

插件开发 发布时间:2022-03-12 07:34:39 ,浏览量:6

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

1.算法程序

  illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是打开多页PDF,开发一个打开多页PDF功能,以下功能仅用于学习交流,请勿用于非法用途,源代码如下所示:

var w = new Window("dialog { text: 'PDF 打开选项', frameLocation:[400, 200], alignChildren:['fill', 'top'], filePnl: Panel { text: 'PDF 文件', orientation:'row', alignChildren:['left', 'center'], loadBtn: Button { text:'. . .', helpTip :'浏览 PDF 文件, 或将文件路径粘帖至右边文本框'}, et: EditText { text:'' , preferredSize: [220, 20]}, }, rangePnl: Panel { text: '页面', orientation:'column', alignChildren:['fill', 'top'], range: Group {allRb: RadioButton { text:'全部页面', value:true, helpTip: '部分 PDF 文件可能无法正确获取页数\\n遇此请自行输入“ 1-总页数”'}, rangeRb: RadioButton { text:'范围:', helpTip: '正确: 1-5 或 1, 2, 3 或 1, 2-4, 5, 7-8\\n允许空格, 逗号须为半角'} et: EditText { text: '', characters:25, properties:{multiline:true} }}, caGrp: Group{artboardsCb: Checkbox { text:'创建画板', preferredSize: [84, 20], helpTip: '仅适用于CS4/CS5'}, st: StaticText { text: '间距:' }, et: EditText { text:'20', characters:3}, st2: StaticText { text:'pt' }}, }, dividerLine: Panel { preferredSize: [280, 1], margins:0, }, btn: Group { orientation:'row', alignChildren:['right', 'center'], cancelBtn: Button { text:'取消', properties:{name:'cancel'}}, buildBtn: Button { text:'打开', properties:{name:'ok'} }}}");
w.rangePnl.caGrp.artboardsCb.enabled = w.rangePnl.caGrp.artboardsCb.value = app.version.split(".")[0] > 13;
w.filePnl.loadBtn.onClick = function() {
    var pdfile = File.openDialog("选择PDF文件", "*.pdf");
    pdfile && w.filePnl.et.text = pdfile.fsName;
};
w.rangePnl.range.et.onChange = function() {
    this.parent.rangeRb.value = true;
};
w.btn.buildBtn.onClick = function go() {
    var start = new Date().getTime();
    var pdfile = w.filePnl.et.text;
    var allPage = w.rangePnl.range.allRb.value;
    var pageRange = w.rangePnl.range.et.text;
    var createAbs = w.rangePnl.caGrp.artboardsCb.value;
    var gap = w.rangePnl.caGrp.et.text;
    var psArr = [];
    var maxArr = null;
    var pageArr = null;
    var pdfOptions = app.preferences.PDFFileOptions;
    var oldInteractionPref = app.userInteractionLevel;
    w.close(0);
    app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
    pdfOptions.pageToOpen = 1;
    app.open(new File(pdfile));
    width = activeDocument.width;
    height = activeDocument.height;
    activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    if (allPage) {
        pageCount = getPDFPageCount(new File(pdfile));
        if (!pageCount) {
            return;
        }
        mainloop(pageCount, 0, pageCount);
    } else {
        maxArr = function() {
            for (var i = 0,
            var a = []; ++i = 0; k--) {
            if (layers[k].groupItems.length > 0) {
                layers[k].visible = true;
                var myGroup = layers[k].groupItems[0];
                myGroup.top = (activeDocument.artboards[k].artboardRect[1] + psArr[k][0]) - height;
                myGroup.left = activeDocument.artboards[k].artboardRect[0] + psArr[k][1];
                layers[k].visible = false;
            }
        }
    }
    finish = new Date().getTime();
    totalSeconds = (finish - start) / 1000;
    minutes = Math.floor(totalSeconds / 60);
    seconds = totalSeconds % 60;
    alert("操作已完成,图层为隐藏状态,按住Alt单击眼睛图标以显示\n打开 " + activeDocument.layers.length + " 页, 用时 " + minutes + " 分, " + Math.round(seconds) + " 秒.");
    app.userInteractionLevel = oldInteractionPref;

    function mainloop(start, end, pages) {
        if (createAbs) {
            targetDoc = app.documents.add(DocumentColorSpace.CMYK, width, height, pages, DocumentArtboardLayout.GridByRow, gap, Math.round(Math.sqrt(pages)))
        } else {
            targetDoc = app.documents.add(DocumentColorSpace.CMYK, width, height)
        }
        for (var i = start; i > end; i--) {
            p = pageArr ? pageArr[i] : i;
            pdfOptions.pageToOpen = p;
            sourceDoc = app.open(new File(pdfile));
            targetLayer = targetDoc.layers.add();
            targetLayer.name = "Page " + p;
            main(sourceDoc, targetLayer, psArr);
        }
    }
};
w.btn.cancelBtn.onClick = function() {
    w.close(0);
};
w.show();

function main(sourceDoc, targetLayer, psArr) {
    if (!sourceDoc.pageItems.length) {
        sourceDoc.close(SaveOptions.DONOTSAVECHANGES);
        psArr.push(null);
        return;
    }
    sourceDoc.pageItems[0].selected = true;
    if (!sourceDoc.pageItems[sourceDoc.pageItems.length - 1].selected) {
        groupAll(sourceDoc);
    }
    psArr.push([sourceDoc.groupItems[0].top, sourceDoc.groupItems[0].left]);
    sourceDoc.groupItems[0].duplicate().moveToEnd(targetLayer);
    targetLayer.visible = false;
    sourceDoc.close(SaveOptions.DONOTSAVECHANGES);
}

function groupAll(doc) {
    var group = doc.layers.add().groupItems.add();
    var layer = doc.layers[1];
    for (a = layer.pageItems.length; a-- > 0; layer.pageItems[a].move(group, ElementPlacement.PLACEATBEGINNING)) {

    }
}

function getPDFPageCount(f) {
    var gotCount = false;
    if (BridgeTalk.isInstalled("bridge") && BridgeTalk.isRunning("bridge")) {
        return getPDFCount_Br(f);
    }
    f.open("r");
    while (!gotCount) {
        next_line = f.readln();
        if (f.eof) {
            alert("抱歉,未能获取总页数");
            f.close();
            return 0;
        }
        if (next_line.indexOf("/N ") > 0) {
            p = next_line.match(/\/N (\d+)\/T/)[1];
            gotCount = true;
        } else {
            if (next_line.indexOf("/Pages>>") > 0) {
                p = next_line.match(/\/Count (\d+)\/K/)[1];
                gotCount = true;
            }
        }
    }
    f.close();
    return Number(p);
}

function getPDFCount_Br(file) {
    var f = new File(file);
    var bt = new BridgeTalk();
    bt.target = "bridge";
    bt.body = "function a(){app.document.setPresentationMode(\"browser\",\"" + f.path + "\");tn = new Thumbnail( File(\"" + f + "\") ); return tn.core.itemContent.pageCount}a();";
    bt.onResult = function(inBT) {
        data = eval(inBT.body);
    };
    bt.onError = function(inBT) {
        data = "";
    };
    bt.send();
    bt.pump();
    $.sleep(100);
    timeOutAt = new Date().getTime() + 5000;
    currentTime = new Date().getTime();
    while (currentTime             
关注
打赏
1665481431
查看更多评论
0.1564s