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

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 = https://www.itzhengshu.com/pdf/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 = https://www.itzhengshu.com/pdf/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 < 101; a.push(i)) {}return a;}();pageArr = pageRange.replace(/s/g,"").replace(/(d )-(d )/g, function($1, $2, $3) {return maxArr.slice($2 - 1, $3);}).split(",");mainloop(pageArr.length - 1, -1, pageArr.length);}if (createAbs) {var layers = activeDocument.layers;layers[layers.length - 1].remove();psArr = psArr.reverse();for (var k = layers.length - 1; k >= 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 = https://www.itzhengshu.com/pdf/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 < timeOutAt && undefined == data) {bt.pump();$.sleep(100);currentTime = new Date().getTime();}undefined == data && data = https://www.itzhengshu.com/pdf/0;return data;}

2.作者答疑


如有疑问,请留言 。
【illustrator插件-常用功能开发-打开多页PDF-js脚本开发-AI插件】提示: 作者知了-联系方式1
提示: 作者知了-联系方式2

相关经验推荐