2013-06-26 2 views
1

Вот загадка, которую я обнаружил.«Не открыта окно документа»

У меня есть скрипт, который открывает файл в InDesign, выполняет некоторую работу с ним, а затем закрывает его. Чтобы ускорить его, я выключил отображение файла с помощью false аргумента при открытии файла, например, так:

var document = app.open(oFile, false); 

Иногда, при выполнении некоторой работы на открытом файле, то сценарий может понадобиться нужно изменить размер определенной страницы из 11 дюймов в высоту до 12,5 дюймов, таким образом:

if (padPrinted) { 
     for (var p = 0; p < outputRangeArray.length; p++) { 
      var padPage = document.pages.item(outputRangeArray[p]); 
      if (padPage.bounds[2] - padPage.bounds[0] === 11) { 
       padPage.select(); 
       var myY1 = padPage.bounds[0] -= 0.75; 
       var myX1 = padPage.bounds[1]; 
       var myY2 = padPage.bounds[2] += 0.75; 
       var myX2 = padPage.bounds[3]; 
       padPage.reframe(CoordinateSpaces.INNER_COORDINATES, [[myX1*72, myY1*72], [myX2*72, myY2*72]]); 
      } 
     } 
    } 

Это работает безупречно для меня в течение некоторого времени, но теперь это иногда ошибки на линии padPage.select() с сообщением:

Окна документов не открыты.

Если я вернусь к строке, которая открывает файл и удаляет аргумент false, тогда скрипт работает нормально.

Итак, я хотел бы знать, есть ли способ обойти это. Я хотел бы открыть документы, не показывая их, но все же имею возможность изменять размер страницы, когда мне это нужно. Есть идеи?

ответ

1

Почему вы звоните padPage.select();? Это не похоже на то, что ваш код нуждается в этом.

Edit:

На странице к странице 42 Adobe InDesign CS6 Scripting Guide: Javascript, есть пример сниппет, который требует некоторого изменения страницы и не вызывает select(). Отрывок из сценария образца находится в InDesign CS6 Scripting SDK (прокрутите вниз).

Путь примера сценария является Adobe InDesign CS6 сценариев SDK \ InDesign \ scriptingguide \ Сценарии \ JavaScript \ документы \ PageReframe.jsx

Осматривая этот сценарий, мы видим, что он никогда не называет select(). Фактически, PageResize.jsx никогда не вызывает select().

Кроме того, хотя InDesign Server может изменять размер и перерисовывать страницы, вы заметите, что функция select() - missing entirely. Казалось бы, select() влияет только на графический интерфейс.

Перед лицом всех этих доказательств я бы сказал, что руководство по написанию сценариев неверно, когда говорится: «Вы должны выбрать страницу». Попробуйте удалить эту строку и посмотреть, работает ли она.

Edit 2

На несвязанной ноте, следующие строки могут быть хлопотно:

var myY1 = padPage.bounds[0] -= 0.75; 
var myX1 = padPage.bounds[1]; 
var myY2 = padPage.bounds[2] += 0.75; 

+= и -= операторы будут пытаться изменить границы непосредственно, но границы являются Read- только и могут быть изменены только с помощью таких методов, как resize или reframe.Я рекомендовал бы изменить его к этому:

var myY1 = padPage.bounds[0] - 0.75; 
var myX1 = padPage.bounds[1]; 
var myY2 = padPage.bounds[2] + 0.75; 
+0

Согласно странице 41 [Adobe InDesign CS6 Scripting Guide: Javascript] (http://wwwimages.adobe.com/www.adobe.com/content/dam /Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingGuide_JS.pdf), «Прежде чем изменять размер страницы или применить преобразование на страницу, вы должны выбрать страницу». – Sturm

+0

@Sturm Мой ответ был слишком длинным, поэтому вместо этого я отредактировал свой ответ. – dln385

+0

Вот и все. Я помню, как пытался использовать метод '.reframe()' до этого без успеха, но метод '.select()' на странице заставлял его работать. Или, может быть, я просто неправильно помню. Независимо от того, что вы правильно отредактировали на странице 42, я никогда не замечал пропусков '.select()' в ней раньше. Кроме того, спасибо за то, что вы поймали это '+ =' и '- =' gaffe. Сначала я попытался заставить его работать, не назначая их переменным, но вскоре обнаружил, что 'bounds' доступны только для чтения и забывают удалить оператор присваивания после этого. Еще раз спасибо, dln385, ты потрясающий! – Sturm