InDesign脚本为瓷砖分块排版图自动添加行列字母数字编号
InDesign瓷砖分块自动定位编号脚本实现
问题背景
开发InDesign自动化脚本过程中未在公开渠道找到对应解决方案,需求来自瓷砖印刷实际业务场景:
- 业务流程需要将大幅面图像拆分为多个正方形分块,分别印刷在单块瓷砖上,铺贴工人需参考定位标识拼接还原整幅图像
- 定位规则采用类海战棋网格规则:纵向行用大写字母标识、横向列用数字标识,即A1、A2这类编号,标识放置在图像外侧,仅作铺贴定位参考
- 已完成基础脚本开发,可实现InDesign文档每页放置1张正方形分块图并居中适配页面,也已掌握在图片下方添加并定位文本框的方法,核心待解决问题为按上述行列规则生成对应的编号文本内容。
初始基础脚本
已完成的初始图片导入排版脚本如下:
var Pagewidth =app.activeDocument.documentPreferences.pageWidth; var Pageheight = app.activeDocument.documentPreferences.pageHeight; var Imagefolder = Folder.selectDialog("Select a folder"); var Images = Imagefolder.getFiles(/.+\.(?:gif|jpe?g|eps|tiff?|psd|pdf|bmp|png)$/i); for(var i =0; i < Images.length; i++) { var Placed = app.activeDocument.pages.item(-1).place(Images[i]); app.activeDocument.align(Placed[0], AlignOptions.VERTICAL_CENTERS, AlignDistributeBounds.PAGE_BOUNDS); app.activeDocument.align(Placed[0], AlignOptions.HORIZONTAL_CENTERS, AlignDistributeBounds.PAGE_BOUNDS); Placed[0].parent.fit(FitOptions.FRAME_TO_CONTENT); app.activeDocument.pages.add(LocationOptions.AT_END); } app.activeDocument.pages.item(-1).remove();
需求明细
- 支持用户手动设置横向瓷砖列数(例如设置为4)
- 编号生成规则:第一行(A行)依次生成A1至A4的编号,第二行(B行)依次生成B1至B4的编号,后续行依次递推使用C、D等字母,直到所有瓷砖分块图处理完成
- 编号文本需放置在对应页面图片的下方居中位置
最终实现代码
结合参考方案适配完成的最终可用脚本如下,已加入输入校验、编号生成、文本框样式设置逻辑:
var Pagewidth =app.activeDocument.documentPreferences.pageWidth; var Pageheight = app.activeDocument.documentPreferences.pageHeight; // 弹出输入框让用户设置列数 var Columns = prompt("请输入横向瓷砖列数",""); if(!Columns){ exit(); } if(!Number(Columns)){ alert("仅允许输入数字"); exit(); } var Imagefolder = Folder.selectDialog("选择图片所在文件夹"); if(!Imagefolder){ exit(); } var Images = Imagefolder.getFiles(/.+\.(?:gif|jpe?g|eps|tiff?|psd|pdf|bmp|png)$/i); // 批量导入图片并居中排版 for(var i =0; i < Images.length; i++){ var Placed = app.activeDocument.pages.item(-1).place(Images[i]); app.activeDocument.align(Placed[0], AlignOptions.VERTICAL_CENTERS, AlignDistributeBounds.PAGE_BOUNDS); app.activeDocument.align(Placed[0], AlignOptions.HORIZONTAL_CENTERS, AlignDistributeBounds.PAGE_BOUNDS); Placed[0].parent.fit(FitOptions.FRAME_TO_CONTENT); app.activeDocument.pages.add(LocationOptions.AT_END); } app.activeDocument.pages.item(-1).remove(); // 生成编号序列 var Lettersnumber = 26; var Arr = []; var Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for(var j = 0; j < Lettersnumber; j++){ for(var k = 1; k <= Columns; k++){ Arr.push(Letters[j] + k); } } // 逐页添加编号文本框 for(var l = 0; l < app.activeDocument.allGraphics.length; l++){ if(app.activeDocument.allGraphics[l].parentPage != null){ try{ var Subtext = app.activeDocument.allGraphics[l].parentPage.textFrames.add(); Subtext.textFramePreferences.verticalJustification = VerticalJustification.TOP_ALIGN; Subtext.contents = Arr[l]; Subtext.paragraphs[0].appliedFont = app.fonts.item("Arial"); Subtext.paragraphs[0].pointSize = "30"; Subtext.paragraphs[0].justification = Justification.CENTER_ALIGN; var Margin = app.activeDocument.allGraphics[l].parent.visibleBounds; Subtext.visibleBounds = [Margin[2]+12, Margin[1], Margin[2]+4, Margin[3]]; Subtext.fit(FitOptions.FRAME_TO_CONTENT); Subtext.fit(FitOptions.FRAME_TO_CONTENT); Subtext.move(undefined, ["0", "12"]); } catch(e){ alert("当前编号序列长度不足,无法覆盖文档内所有图片"); break; } } }
内容的提问来源于stack exchange,提问作者user18714172
相关产品推荐
相关产品推荐

