Javascript 使用Indesign脚本重新排序/移动页面

Javascript 使用Indesign脚本重新排序/移动页面,javascript,adobe,adobe-indesign,Javascript,Adobe,Adobe Indesign,我有一个近400页的文档,我需要[随机]重新排序页面。(如果你需要知道,这是一本需要随机分发的单页故事书。我创建了一个随机的页面列表以输入脚本。) 我一直在使用互联网上其他地方找到的一个经过修改的脚本,该脚本创建了一个数组并移动页面: var order="...list of new page numbers..."; // Create an array out of the list: ranges = toSeparate (order); if (ran

我有一个近400页的文档,我需要[随机]重新排序页面。(如果你需要知道,这是一本需要随机分发的单页故事书。我创建了一个随机的页面列表以输入脚本。)

我一直在使用互联网上其他地方找到的一个经过修改的脚本,该脚本创建了一个数组并移动页面:

var order="...list of new page numbers...";  
// Create an array out of the list:  
ranges = toSeparate (order);  
if (ranges.length != app.activeDocument.pages.length)  
{  
 alert ("Page number mismatch -- "+ranges.length+" given, "+app.activeDocument.pages.length+" in document");  
 exit(0);  
}  
// Consistency check:  
sorted = ranges.slice().sort(numericSort);  
for (a=0; a<sorted.length-1; a++)  
{  
 if (sorted[a] < sorted[a+1]-1 ||  
  sorted[a] == sorted[a+1])  
  alert ("Mismatch from "+sorted[a]+" to "+sorted[a+1]);  
}  
// alert ("New order for "+order+"\nis "+ranges.join(", "));  
// Convert from 1..x to 0..x-1:  
for (moveThis=0; moveThis<ranges.length; moveThis++)  
 ranges[moveThis]--;  
for (moveThis=0; moveThis<ranges.length; moveThis++)  
{  
 if (moveThis != ranges[moveThis])  
 {  
  try{  
   app.activeDocument.pages[ranges[moveThis]].move (LocationOptions.BEFORE, app.activeDocument.pages[moveThis]);  
  } catch(_) { alert ("problem with page "+moveThis+"/index "+ranges[moveThis]); }  
 }  
 for (updateRest=moveThis+1; updateRest<ranges.length; updateRest++)  
  if (ranges[updateRest] < ranges[moveThis])  
   ranges[updateRest]++;  
}  
function toSeparate (list)  
{  
 s = list.split(",");  
 for (l=0; l<s.length; l++)  
 {  
  try {  
  if (s[l].indexOf("-") > -1)  
  {  
   indexes = s[l].split("-");  
   from = Number(indexes[0]);  
   to = Number(indexes[indexes.length-1]);  
   if (from >= to)  
   {  
    alert ("Cannot create a range from "+from+" to "+to+"!");  
    exit(0);  
   }  
   s[l] = from;  
   while (from < to)  
    s.splice (++l,0,++from);  
  }} catch(_){}  
 }  
// s.sort (numericSort);  
 return s;  
}  
function numericSort(a,b)  
{  
 return Number(a) - Number(b);  
} 
每一页都是如此。(这让我想起了我在初中时用sendKeys用Visual Basic创建程序的经历。如果我费心认真学习JavaScript而不是创建糟糕的AOL聊天室滚动条,我今天可能就不会在这里了。)

然而,我收到了以下错误:

错误号码:30477 错误字符串:方法“move”的参数“reference”的值无效。预期页面或跨页,但未收到任何内容


我试图避免手动移动页面,特别是考虑到我已经花了很多时间来处理这个问题。关于我需要改变什么有什么建议吗?谢谢大家!

问题可能是,您在每个排列中使用了多个页面,然后试图将它们在整个排列中移动。更好的方法是使用单页每页。 下面是一个在我的机器上运行的小片段

var doc=app.activeDocument;
doc.documentPreferences.facingPages=false;
对于(变量i=0;i<100;i++){
var index=parseInt((Math.random()*doc.spreads.length)%doc.spreads.length+'',10);
单据价差[index].move();
}

它的作用是

  • 禁用“对页”选项,并使每个排列一页。一个理想的条件,正如你所提到的,你的故事每一页(我假设你的故事不会违反这个假设)
  • 从文档中获取一个随机排列,并将其发送到文档中排列的末尾。它这样做了100次。 结果就是你想要的。随机洗牌当前排列的脚本

  • 您是否考虑过在新文档中随机插入页面,而不是在单个文档中移动页面?另外:re:indexing,为什么不能自动生成目录?我没有考虑过,但我喜欢这样简单的解决方案。那可能就是我最后要做的。至于索引,它不会以这种方式工作,因为在indesign之外是如何设置的。
       app.activeDocument.pages[298].move (LocationOptions.BEFORE, app.activeDocument.pages[366]);
       app.activeDocument.pages[33].move (LocationOptions.BEFORE, app.activeDocument.pages[365]);
       app.activeDocument.pages[292].move (LocationOptions.BEFORE, app.activeDocument.pages[364]);