使用 Javascript 为 InDesign 中的所有选定项目添加投影

Add Drop Shadow to All Selected Items in InDesign using Javascript

正在尝试弄清楚如何在 InDesign CC 中为页面上的所有选定项目添加投影。这是我的,但上面写着 "Undefined is not an object."

myDS = app.select(SelectAll.ALL);
myDS.dropShadowSettings.mode = ShadowMode.drop;
myDS.dropShadowSettings.angle = .0083;
myDS.dropShadowSettings.xOffset = 0.08;
myDS.dropShadowSettings.yOffset = 0.08;
myDS.dropShadowSettings.size = 0.6;

通过使用 "select all",返回的对象是一个经典数组,其中 dropShadowSettings 不是有效的 属性,因此出现错误。 我建议不要直接设置道具,而是应用对象样式。这样,您将能够手动编辑样式并看到之前关注的对象正在更新。

var doc = app.activeDocument;
var os = doc.objectStyles.itemByName ( "myDropShadow" );
!os.isValid && os = doc.objectStyles.add ( {
 name:"myDropShadow",
 transparencySettings:{
  dropShadowSettings:{
   mode:ShadowMode.drop,
   angle : .0083,
   xOffset : 0.08,
   yOffset : 0.08,
   size : 0.6,
  }
 }
});
app.activeDocument.pageItems.everyItem().appliedObjectStyle = os;

顺便说一句,最好不要使用 UI 命令,例如 copy/paste/select,因为它们很耗时,而且 dom 本身总是有替代方法。

那就是这样(尽管我更愿意检查项目是否具有应用的对象样式,如果是,则编辑对象样式本身。然后我会查看项目是否具有已处理的样式以获得性能。但是要简介:

var allPageItems  = doc.allPageItems;
var n = allPageItems.length;
while ( n-- ) process ( allPageItems[n] );
function process ( item) {
 if ( !item.properties.transparencySettings ) return;
 item.transparencySettings.dropShadowSettings.mode = ShadowMode.NONE;
}