détection de texte Reliably trop-pleins dans TextFrames dans InDesign Server à l'aide de scripts javascript?

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

Question

Je fais des scripts Javascript avec InDesign Server pour le moment. Je vais avoir du mal à essayer de détecter de manière fiable dans les débordements TextFrames, après avoir modifié le formatage ou placer XML en eux.

Par exemple, j'ai une fonction qui réduit la hauteur d'une colonne 4 TextFrame jusqu'à ce que le texte déborde le cadre. Ensuite, il augmente la hauteur jusqu'à ce qu'il ne déborde. Cela devrait se traduire aussi près des hauteurs de colonne égale que possible.

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

Dans le bureau InDesign ceci fonctionne très bien (avec quelques modifications à faire utiliser l'objet sélectionné), mais dans InDesign Server cela semble dépasser pendant la phase rétrécissement, et seulement développer une fois.

Un problème similaire se produit également après avoir placé XML dans un TextFrame puis détecter si ce texte a provoqué un débordement. Si je vérifie le débordement directement après PlaceXML (), elle renvoie toujours faux, mais si je vérifie le dépassement à une partie ultérieure du script, il détecte correctement.

Il est un peu comme il y a un retard dans le calcul si les dépassements de texte, mais il porte à travers le script quel que soit jusqu'à ce que la propriété overflow est mis à jour sur le TextFrame.

Yat-il un moyen de forcer le script à attendre jusqu'à ce que la propriété overflow a été mis à jour? Ou régler le mode du script d'attendre la mise à jour? Ou suis-je fais juste mal?

Était-ce utile?

La solution 2

Alors, il se trouve que cela a été causé par un effet secondaire de la façon dont mon XML a été structuré. Le XML que je présente une demande au TextFrame contenait un certain nombre de balises <p> qui semblait confondre le moteur de mise en page lors de l'évaluation des trop-pleins. J'ai couru mon XML à travers un script pour remplacer les étiquettes avec &#x2029; (le caractère de séparation de l'alinéa) et il fonctionne très bien maintenant.

Autres conseils

Comme vous l'avez trouvé, la composition est une tâche différée. La plupart des activités de script qui nécessitent la composition valide forceront automatiquement, mais parfois vous devez utiliser la méthode recompose (), par exemple.

myDocument.recompose()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top