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

时间:2018-06-14 14:01:45

标签: javascript adobe adobe-indesign

我有一个近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);  
} 

这段代码有效,除了它一直将它们重新排列成错误的随机顺序,这在一天结束时是可行的,但是对于故事索引来说,这只是一个更大的痛苦。 / p>

我怀疑问题可能是由于文档开始而不是结束而引起的,所以我修改了脚本以便在结束时开始,然后 app.activeDocument.pages [范围[moveThis]] 一直未定义。

所以我说他妈的并尝试了这个:

   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]);

对于每一页都是如此。 (这让我想起了我在初中使用 sendKeys 在Visual Basic中创建程序的时间。如果我打算认真学习JavaScript而不是创建糟糕的AOL聊天室卷轴,我今天可能不会在这里。)

尽管如此,我收到了以下错误:

  

错误号码:30477   错误字符串:方法'move'的参数'reference'的值无效。预期页面或传播,但一无所获。

我正在努力避免手动移动页面,特别是考虑到我已经在处理这个问题的时间。关于我需要改变什么的任何建议?谢谢!

1 个答案:

答案 0 :(得分:0)

问题可能是您在每个跨页上使用了多个页面,然后尝试在跨跨页上随机排列它们。更好的方法是每个跨页使用单个页面。 这是一个可以在我的计算机上运行的小片段

<select class="uk-select uk-form-blank uk-form-width-medium uk-margin-small-bottom"> <option>London</option> <option>Paris</option> <option>Berlin</option> </select> <input value="" class="uk-input uk-form-blank uk-form-width-medium uk-margin-small-bottom" type="text" disabled>

这是什么

  1. 禁用对页选项,每页展开一页。您提到一个理想的条件是您的故事每个一页(我假设您的故事不会违反此假设)。
  2. 从文档中随机抽取一个点差,并将其发送到文档中点差的末尾。它这样做了100次。 结果就是您想要的。一个脚本,用于随机随机播放当前的SPREADS。