Confiantemente detectar estouros de texto em TextFrames em InDesign Server usando scripts javascript?

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

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?

Foi útil?

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 &#x2029; (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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top