2009-07-04 5 views
2

현재 InDesign Server에서 몇 가지 Javascript 스크립팅을하고 있습니다. 서식을 변경하거나 XML을 배치 한 후 TextFrames의 오버플로를 안정적으로 감지하려고하는 데 문제가 있습니다.자바 스크립팅을 사용하여 InDesign Server의 텍스트 프레임에서 텍스트 오버 플로우가 안정적으로 감지됩니까?

예를 들어 텍스트가 프레임을 오버플로 할 때까지 4 열짜리 TextFrame의 높이를 줄이는 기능이 있습니다. 그런 다음 오버 플로우가 없어 질 때까지 높이를 증가시킵니다. 이렇게하면 가능한 한 동일한 높이에 근접해야합니다. 이 잘 작동 인디자인 바탕 화면에서

while(!bodyTextFrame.overflows) { 
    var bounds = bodyTextFrame.geometricBounds; 
    bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] - 1, bounds[3]]; 
    //app.consoleout("shrinking"); 
} 

while(bodyTextFrame.overflows) { 
    var bounds = bodyTextFrame.geometricBounds; 
    bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] + 1, bounds[3]]; 
    //app.consoleout("expanding"); 
} 

(일부 수정으로 현재 선택된 개체를 사용할 수 있도록하기 위해)하지만, 인디자인 서버에서이 위축 단계에서 오버 슈트 것, 그리고 한 번만 확장합니다.

비슷한 문제는 XML을 TextFrame에 배치 한 다음 해당 텍스트로 인해 오버플로가 발생했는지 여부를 감지 한 후에도 발생합니다. placeXML() 바로 뒤에 오버플로가 있는지 확인하면 항상 false를 반환하지만 스크립트의 뒷부분에서 오버플로를 확인하면 올바르게 감지합니다.

텍스트가 오버플로되는지 여부를 계산하는 데 지연이있는 것처럼 보이지만 오버플로 속성이 TextFrame에서 업데이트 될 때까지 스크립트를 통해 계속 수행됩니다.

오버 플로우 속성이 업데이트 될 때까지 스크립트가 대기하도록하는 방법이 있습니까? 또는 새로 고침을 기다리는 스크립트의 모드를 설정 하시겠습니까? 아니면 내가 잘못하고있는거야?

답변

0

그래서 내 XML이 어떻게 구조화되었는지에 따른 부작용이 원인 인 것으로 나타났습니다. TextFrame에 적용한 XML에는 <p> 태그가 여러 개 포함되어있어 오버플로를 평가할 때 레이아웃 엔진을 혼란스럽게 보였습니다. 나는 XML을 스크립트를 통해 &#x2029; (단락 분리 문자)으로 바꾸 었으며 현재 잘 작동합니다.

1

발견 한대로 지연된 작업입니다. 유효한 구성을 요구하는 대부분의 스크립팅 활동은 자동으로 강제 실행되지만 때로는 recompose() 메소드를 사용해야합니다.

myDocument.recompose()