Confiantemente detectar estouros de texto em TextFrames em InDesign Server usando scripts javascript?
-
23-08-2019 - |
Pergunta
Eu estou fazendo alguns scripts Javascript com InDesign Server no momento. Estou tendo problemas para tentar detectar com segurança transborda em TextFrames, depois de mudar a formatação ou colocando XML para eles.
Por exemplo, eu tenho uma função que reduz a altura de um TextFrame 4 coluna até que o texto transborda o quadro. Em seguida, ele aumenta a altura até que já não transborda. Isso deve resultar em tão perto de alturas de colunas iguais quanto possível.
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");
}
No InDesign área de trabalho esta multa obras (com algumas modificações para torná-lo usar o objeto selecionado no momento), mas no InDesign Server este parece superação durante a fase de encolhimento, e só então expandir uma vez.
Um problema semelhante também ocorre após a colocação XML em um TextFrame e depois detectar se esse texto causou um estouro. Se eu verificar o estouro diretamente após placeXML (), ele sempre retorna false, mas se eu verificar o transbordamento numa parte mais perto do script, ele detecta-lo corretamente.
É um pouco como se houvesse um atraso no cálculo se o texto transborda, mas continua através do script independentemente até que a propriedade overflow é atualizado no TextFrame.
Existe uma maneira de forçar o script que esperar até a propriedade overflow foi atualizado? Ou definir o modo do script para aguardar a atualização? Ou estou apenas fazendo errado?
Solução 2
Assim, verifica-se que isto estava sendo causado por um efeito colateral de como meu XML foi estruturado. O XML eu estava aplicando à TextFrame continha um número de tags <p>
que parecia confundir o mecanismo de layout ao avaliar os excessos. Passei a XML através de um script para substituir as tags com 

(o personagem parágrafo separador) e ele funciona muito bem agora.
Outras dicas
Como você encontrou, composição é uma tarefa adiada. A maioria das atividades de script que exigem composição válida irá forçá-lo automaticamente, mas às vezes você tem que usar o método recompose (), por exemplo.
myDocument.recompose()