LanyaAITools.jsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. #target illustrator
  2. #targetengine main
  3. var vs = "illustrator-" + app.version.substr(0, 2);
  4. var panel = new Window("palette", "蘭雅 Adobe Illustrator 工具箱© 2023.11.11");
  5. // 创建面板 使用 new Window("palette") ,需要 BridgeTalk, 它是 Adobe 应用程序之间进行通信的一种机制。
  6. // 它允许不同的 Adobe 应用程序在同一台计算机上进行交互和数据共享。
  7. // var bt = new BridgeTalk();
  8. // bt.target = "photoshop"; // 目标应用程序名称
  9. // bt.body = "alert('Hello from Illustrator!')"; // 要发送的消息或脚本
  10. // bt.send();
  11. // 实际代码建立 buildMsg(code) 函数传送代码
  12. function buildMsg(code) {
  13. try {
  14. var bt = new BridgeTalk;
  15. bt.target = vs;
  16. var msg = code;
  17. bt.body = msg;
  18. bt.send();
  19. } catch (e) { }
  20. }
  21. with (panel) {
  22. // 创建按钮组
  23. var BtGroup1 = panel.add("group");
  24. var BtGroup2 = panel.add("group");
  25. // 设置按钮组为水平布局
  26. BtGroup1.orientation = "row";
  27. BtGroup2.orientation = "row";
  28. // 添加按钮
  29. var button1 = BtGroup1.add("button", undefined, "标注尺寸");
  30. var button2 = BtGroup1.add("button", undefined, "文件名日期");
  31. var button3 = BtGroup1.add("button", undefined, "借咬口5mm");
  32. var button4 = BtGroup1.add("button", undefined, "尺寸取整");
  33. var button5 = BtGroup2.add("button", undefined, "拼版左上对齐");
  34. var button6 = BtGroup2.add("button", undefined, "物件尺寸大小");
  35. var button7 = BtGroup2.add("button", undefined, "物件轮廓边界");
  36. // 设置按钮组的边缘间距 设置按钮间距
  37. BtGroup1.spacing = 2; // 调整按钮之间的间距
  38. BtGroup2.spacing = 2;
  39. // 按钮点击事件处理程序
  40. button1.onClick = function () {
  41. buildMsg("make_size();");
  42. };
  43. button2.onClick = function () {
  44. buildMsg("filename_date();");
  45. };
  46. button3.onClick = function () {
  47. buildMsg("mark_5mm();");
  48. };
  49. button4.onClick = function () {
  50. buildMsg("size_to_integer();");
  51. };
  52. button5.onClick = function () {
  53. buildMsg("replace_align_position();");
  54. };
  55. button6.onClick = function () {
  56. buildMsg("size_by_width_height();");
  57. };
  58. button7.onClick = function () {
  59. buildMsg("size_by_controlBounds();");
  60. };
  61. }
  62. // 显示面板
  63. panel.show();
  64. //==================================================================================//
  65. // 蘭雅 Adobe Illustrator 工具箱© 2023.11.11 各个按钮功能模块
  66. //==================================================================================//
  67. // 标注尺寸
  68. function make_size() {
  69. // 定义当前激活文档
  70. var docRef = activeDocument;
  71. var mm = 25.4 / 72; // pt 和 mm 转换系数
  72. var myFont = textFonts.getByName("MicrosoftYaHei");
  73. var myFontSize = 24;
  74. var x, y;
  75. // 格式化尺寸为 mm 取整数
  76. function formatSize(size) {
  77. return Math.round(size * mm).toFixed(0);
  78. }
  79. // 设置填充颜色为CMYK红色 (0, 100, 100, 0)
  80. var cmykRed = new CMYKColor();
  81. cmykRed.cyan = 0;
  82. cmykRed.magenta = 100;
  83. cmykRed.yellow = 100;
  84. cmykRed.black = 0;
  85. function writeText(text) {
  86. var textRef = docRef.textFrames.add(); // 建立文本
  87. textRef.contents = text;
  88. textRef.textRange.characterAttributes.size = myFontSize; // 设置字体尺寸
  89. textRef.textRange.characterAttributes.textFont = myFont; // 设置字体名称
  90. textRef.textRange.characterAttributes.fillColor = cmykRed; // 设置颜色
  91. textRef.top = y + 15 / mm;
  92. textRef.left = x + 10 / mm;
  93. }
  94. // 遍历选择的物件标注尺寸
  95. if (docRef.selection.length > 0) {
  96. var mySelection = docRef.selection;
  97. for (var i = 0; i < mySelection.length; i++) {
  98. var s = mySelection[i]
  99. x = s.left; y = s.top
  100. var str = formatSize(s.width) + "x" + formatSize(s.height) + "mm";
  101. writeText(str)
  102. }
  103. }
  104. }
  105. // 文件名日期
  106. function filename_date() {
  107. // 获取当前时间
  108. function getdate() {
  109. var d = new Date(), month = '' + (d.getMonth() + 1),
  110. day = '' + d.getDate(), year = d.getFullYear();
  111. if (month.length < 2) month = '0' + month;
  112. if (day.length < 2) day = '0' + day;
  113. return [year, month, day].join('-');
  114. }
  115. // 获取 AI文档名称
  116. var docRef = activeDocument;
  117. var str = docRef.name;
  118. str = str + " " + getdate();
  119. // alert("本脚本建立一个文本:\n" + str);
  120. // 文档中建立一个新文本
  121. // var textRef = docRef.textFrames.add();
  122. // textRef.top = 100;
  123. // textRef.left = 200;
  124. // textRef.contents = str;
  125. var mm = 25.4 / 72; // pt 和 mm 转换系数
  126. var base = new Array();
  127. base = docRef.rulerOrigin; // 画板标尺原点,相对于画板的左上角
  128. // alert("画板标尺原点mm x:" + base[0] * mm +" y:" + base[1] * mm + "\n画板大小mm 宽:" + docRef.width * mm +" 高:" + docRef.height * mm);
  129. var pw = 0;
  130. var ph = 0;
  131. var x = base[0]; // 画板左下角 x 坐标
  132. var y = - base[1]; // 画板左下角 y 坐标
  133. var myFont = textFonts.getByName("MicrosoftYaHei");
  134. var myFontSize = 8;
  135. pw = docRef.width; // 文档宽
  136. ph = docRef.height; // 文档高
  137. x = pw / 2 - x; // 转换x坐标: 画板中下x
  138. function filenameDate() {
  139. var textRef = docRef.textFrames.add(); // 建立文本
  140. textRef.contents = str; // 填充文本字符串: AI文档名称 + 时间
  141. textRef.textRange.characterAttributes.size = myFontSize; // 设置字体尺寸
  142. textRef.textRange.characterAttributes.textFont = myFont; // 设置字体名称
  143. textRef.textRange.characterAttributes.fillColor = docRef.swatches[1].color; // 设置拼版色
  144. textRef.top = y + 7.4; // 画板底向上偏移
  145. textRef.left = x - textRef.width - 10; // 画板x中,偏移文本宽和间隔宽
  146. }
  147. filenameDate();
  148. }
  149. // 借咬口5mm
  150. function mark_5mm() {
  151. // 获取 AI文档名称
  152. var docRef = activeDocument;
  153. var str = docRef.name;
  154. str = "借咬口5mm"
  155. var mm = 25.4 / 72; // pt 和 mm 转换系数
  156. var base = new Array();
  157. base = docRef.rulerOrigin; // 画板标尺原点,相对于画板的左上角
  158. var pw = 0;
  159. var ph = 0;
  160. var x = base[0]; // 画板左下角 x 坐标
  161. var y = - base[1]; // 画板左下角 y 坐标
  162. var myFont = textFonts.getByName("MicrosoftYaHei");
  163. var myFontSize = 64;
  164. pw = docRef.width; // 文档宽
  165. ph = docRef.height; // 文档高
  166. x = pw / 2 - x; // 转换x坐标: 画板中下x
  167. // 设置填充颜色为CMYK红色 (0, 100, 100, 0)
  168. var cmykRed = new CMYKColor();
  169. cmykRed.cyan = 0;
  170. cmykRed.magenta = 100;
  171. cmykRed.yellow = 100;
  172. cmykRed.black = 0;
  173. function writeText() {
  174. var textRef = docRef.textFrames.add(); // 建立文本
  175. textRef.contents = str; // 填充文本字符串: AI文档名称 + 时间
  176. textRef.textRange.characterAttributes.size = myFontSize; // 设置字体尺寸
  177. textRef.textRange.characterAttributes.textFont = myFont; // 设置字体名称
  178. textRef.textRange.characterAttributes.fillColor = cmykRed // docRef.swatches[4].color; // 从颜色版取色简单,但是结果不确定
  179. textRef.top = y - 15; // 画板底向上偏移
  180. textRef.left = x - textRef.width / 2; // 画板x中,偏移文本宽和间隔宽
  181. }
  182. writeText();
  183. }
  184. // 尺寸取整
  185. function size_to_integer() {
  186. // 定义当前激活文档
  187. var doc = activeDocument;
  188. var mm = 25.4 / 72; // pt 和 mm 转换系数
  189. // 格式化尺寸为 mm 取整数
  190. function formatSize(size) {
  191. return Math.round(size * mm).toFixed(0);
  192. }
  193. // 遍历选择的物件尺寸取整
  194. if (doc.selection.length > 0) {
  195. var src = doc.selection;
  196. for (var i = 0; i < src.length; i++) {
  197. var s = src[i]
  198. s.width = formatSize(s.width) / mm
  199. s.height = formatSize(s.height) / mm
  200. }
  201. }
  202. }
  203. // 物件轮廓边界
  204. function size_by_controlBounds() {
  205. var docRef = activeDocument;
  206. // 判断选择物件2个以上
  207. if (docRef.selection.length > 1) {
  208. // 定义选择物件
  209. mySelection = docRef.selection;
  210. // 最上层物件为替换源
  211. var sourceObj = docRef.selection[0];
  212. // 定义数组保存选择物件controlBounds
  213. var BoundsArray = new Array();
  214. for (var i = 0; i < mySelection.length; i++) {
  215. // PageItem.position 获得物件群组左上角坐标
  216. var sel_Bounds = mySelection[i].controlBounds;
  217. BoundsArray.push(sel_Bounds);
  218. }
  219. // PageItem.duplicate 复制对象, 需要一个相对对象定位
  220. var newGroup = sourceObj.parent.groupItems.add();
  221. for (var i = 1; i < BoundsArray.length; i++) {
  222. var width = BoundsArray[i][2] - BoundsArray[i][0];
  223. var height = BoundsArray[i][1] - BoundsArray[i][3];
  224. sourceObj.width = width;
  225. sourceObj.height = height;
  226. // 移动源文件到目的物件左上角对齐
  227. var sel_xy = new Array(BoundsArray[i][0], BoundsArray[i][1]);
  228. sourceObj.position = sel_xy;
  229. sourceObj.duplicate(newGroup, ElementPlacement.PLACEATEND);
  230. }
  231. sourceObj.remove();
  232. }
  233. }
  234. // 物件尺寸大小
  235. function size_by_width_height() {
  236. var doc = activeDocument;
  237. // 判断选择物件2个以上
  238. if (doc.selection.length > 1) {
  239. // 定义选择物件
  240. src = doc.selection;
  241. var taget = doc.selection[0];
  242. // PageItem.position 获得物件群组左上角坐标
  243. // PageItem.duplicate 复制对象, 需要一个相对对象定位
  244. // 修改taget大小, 移动到src物件左上角对齐, 复制副本
  245. var newGroup = taget.parent.groupItems.add();
  246. for (var i = 1; i < src.length; i++) {
  247. var sel_xy = src[i].position;
  248. taget.width = src[i].width;
  249. taget.height = src[i].height;
  250. taget.position = sel_xy;
  251. taget.duplicate(newGroup, ElementPlacement.PLACEATEND);
  252. }
  253. taget.remove();
  254. }
  255. }
  256. // 拼版左上对齐
  257. function replace_align_position() {
  258. var docRef = activeDocument;
  259. // 判断选择物件2个以上
  260. if (docRef.selection.length > 1) {
  261. // 定义选择物件
  262. mySelection = docRef.selection;
  263. // 最上层物件为替换源
  264. var sourceObj = docRef.selection[0];
  265. // 定义数组用来保存选择物件的左上角坐标
  266. var alterObjectArray = new Array();
  267. for (var i = 0; i < mySelection.length; i++) {
  268. // PageItem.position 获得物件群组左上角坐标
  269. var sel_xy = mySelection[i].position
  270. alterObjectArray.push(sel_xy);
  271. }
  272. // 删除用来定位的下层物件
  273. for (var i = 1; i < mySelection.length; i++) {
  274. mySelection[i].remove();
  275. }
  276. // PageItem.duplicate 复制对象, 需要一个相对对象定位
  277. var newGroup = sourceObj.parent.groupItems.add();
  278. for (var i = 1; i < alterObjectArray.length; i++) {
  279. sourceObj.position = alterObjectArray[i]; // 设置替换物的左上角位置,达到替换目的
  280. sourceObj.duplicate(newGroup, ElementPlacement.PLACEATEND);
  281. }
  282. sourceObj.remove();
  283. }
  284. }