我对使用Applescript编写Indesign脚本非常满意,现在我想学习extendscript和idjs脚本,我对这两者都是绝对的初学者。 下面我设法拼凑了一个基本设置,但我认为我将上述样式混合到一个脚本中,因为它感觉和看起来都非常尴尬。有人可以告诉我如何收拾这个烂摊子,这样我就可以看到它应该是什么样子,并从正确的方法中学习。
脚本按照我想要的方式运行,但无法圆化矩形角,在 applescipt 中我会使用“将给定的形状转换为圆角矩形”,在 jsx 中我设法让我的代码圆整矩形,如下所示。
var myDoc = app.documents.add();
var rect =myDoc.rectangles.add({geometricBounds : [0,0,45,90]}) ;
rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, 8);
但我不知道如何将它合并到我的其他代码中,这就是这个
let myInDesign = require("indesign");
let app = myInDesign.app;
//let myLayer = myDoc.layers.item("Layer 1");
//************* Create Page Size *************
var myDoc = app.documents.add();
with (myDoc.documentPreferences) {
pageHeight = "120 mm";
pageWidth = "235 mm";
pagesPerDocument = 1;
winHeight = "45 mm";
winWidth = "90 mm";
winInLeft = "20 mm";
winUpBottom = "55 mm"; // up from bottom 20mm //
var marginPreferences = app.marginPreferences
marginPreferences.bottom = "17mm";
marginPreferences.left = "10mm";
marginPreferences.right = "10mm";
marginPreferences.top = "10mm";
app.activeDocument.zeroPoint = [0, 0];
//************* WINDOW SIZE & POSITION ************* LAYER INDEX 1
windowLayer = "Window";
targetLayer=myDoc.layers.itemByName(windowLayer);
myDoc.layers.add ({name:windowLayer});
targetLayer=myDoc.layers.itemByName(windowLayer);
var rect =myDoc.rectangles.add({geometricBounds : [0,0,winHeight,winWidth] , strokeColor : myDoc.colors.itemByName("Keyline") , strokeWeight : "0.25" , overprintStroke : true ,});
rect.move([winInLeft, winUpBottom]);
rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, "8"); //************* script stops here.
;
//************* ENV SIZE ************* LAYER INDEX 2
keylineLayer = "Keyline";
targetLayer=myDoc.layers.itemByName(keylineLayer);
myDoc.layers.add ({name:keylineLayer});
targetLayer=myDoc.layers.itemByName(keylineLayer);
var rect =myDoc.rectangles.add({geometricBounds : [0,0,pageHeight,pageWidth] , strokeColor : myDoc.colors.itemByName("Keyline") , strokeWeight : "0.25" , overprintStroke : true ,});
;
//});
}
// Import
const myInDesign = require("indesign");
const app = myInDesign.app;
// Function to create a new document with specified preferences
function createDocument() {
let myDoc = app.documents.add();
with (myDoc.documentPreferences) {
pageHeight = 120 * 2.83465; // mm to points conversion (1 mm = 2.83465 points)
pageWidth = 235 * 2.83465;
pagesPerDocument = 1;
}
return myDoc;
}
// Function to add a layer if it doesn't already exist
function ensureLayer(doc, layerName) {
let layer = null;
try {
layer = doc.layers.itemByName(layerName);
} catch (e) {
layer = doc.layers.add({name: layerName});
}
return layer;
}
// Function to create a rectangle with rounded corners
function createRoundedRectangle(doc, layer, bounds, cornerRadius) {
let rect = doc.rectangles.add({
geometricBounds: bounds,
strokeColor: doc.colors.itemByName("Keyline"),
strokeWeight: 0.25,
overprintStroke: true,
itemLayer: layer
});
rect.convertShape(ConvertShapeOptions.CONVERT_TO_ROUNDED_RECTANGLE, cornerRadius);
return rect;
}
// Main Script
(function main() {
let myDoc = createDocument();
let windowLayer = ensureLayer(myDoc, "Window");
let keylineLayer = ensureLayer(myDoc, "Keyline");
// Adding window rectangle
createRoundedRectangle(
myDoc,
windowLayer,
[0, 0, 45 * 2.83465, 90 * 2.83465], // Convert mm to points
8
).move([20 * 2.83465, 55 * 2.83465]);
// Adding keyline rectangle
createRoundedRectangle(
myDoc,
keylineLayer,
[0, 0, myDoc.documentPreferences.pageHeight, myDoc.documentPreferences.pageWidth],
0 // No rounding for keyline
);
})();