detectar con fiabilidad los desbordamientos de texto en TextFrames en InDesign Server utilizando javascript scripting?

StackOverflow https://stackoverflow.com/questions/1083194

Pregunta

Estoy haciendo algunas secuencias de comandos Javascript con InDesign Server en este momento. Tengo problemas para tratar de detectar de forma fiable desbordamientos en TextFrames, después de cambiar el formato XML o colocar en ellos.

Por ejemplo, tengo una función que se reduce la altura de una columna de TextFrame 4 hasta que el texto se desborda el marco. Luego se aumenta la altura hasta que ya no se desborda. Esto debe resultar en tan cerca de alturas de columna iguales como sea posible.

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");
}

En el escritorio de InDesign esto funciona bien (con algunas modificaciones para hacer que use el objeto seleccionado en ese momento), pero en InDesign Server esto parece sobrepasar durante la fase de contracción, y sólo una vez a expandir.

Un problema similar se produce también después de la colocación de XML en un TextFrame y después detectar si dicho texto ha causado un desbordamiento. Si puedo comprobar el desbordamiento directamente después placeXML (), siempre devuelve falso, pero si puedo comprobar el desbordamiento en la parte posterior de la secuencia de comandos, se detecta correctamente.

Es un poco como si hubiera un retraso en el cálculo de si los desbordamientos de texto, pero se lleva a cabo a través de la escritura sin tener en cuenta hasta que la propiedad de desbordamiento se actualiza en el TextFrame.

¿Hay una manera de forzar a la secuencia de comandos que esperar hasta que la propiedad de desbordamiento se ha actualizado? O ajustar el modo de la secuencia de comandos para esperar a la actualización? O solo estoy haciendo mal?

¿Fue útil?

Solución 2

Por lo tanto, resulta que esto era causado por un efecto secundario de cómo se estructuró mi XML. El XML que estaba aplicando a la TextFrame contenía una serie de etiquetas <p> que parecía confundir el motor de renderizado cuando se evalúan los desbordamientos. Me pasé XML a través de una secuencia de comandos para reemplazar las etiquetas con &#x2029; (el párrafo carácter separador) y funciona bien ahora.

Otros consejos

A medida que encontraste, la composición es una tarea diferido. La mayoría de las actividades de secuencias de comandos que requieren composición válida obligarán automáticamente, pero a veces hay que usar el método de recomponer (), por ejemplo.

myDocument.recompose()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top