InDesign Server の SOAP API を使用して一連のテキストフレームを更新しようとしています。テキストフレームのコンテンツを変更しようとすると、返される結果に欠落したコンテンツや余分なコンテンツが含まれることがあります。
テキストフレームを更新するために使用している関数は次のとおりです。
function update_text(textframe_id, value) {
for (var i = 0; i < document.textFrames.length; i++) {
if (document.textFrames.item(i).id == textframe_id) {
var textframe = document.textFrames.item(i);
textframe.contents = value;
}
}
}
スクリプトが実行されるたびに、ドキュメントが開かれ、変更が加えられ、ドキュメントが保存され、JPG プレビュー イメージが生成され、ドキュメントが閉じられます。この問題を SOAP インターフェイスと呼び出し元の PHP スクリプトから分離するために、スクリプトにパラメーターを渡さず、JS で文字列リテラルを使用して新しいテキストを渡すだけです。
したがって、一連のテキストフレームを次のように更新すると:
update_text(601, "Some text here");
update_text(550, "Some text here");
update_text(527, "Some text here");
update_text(504, "Some text here");
update_text(466, "Some text here");
通常の状況では、私が得る結果は次のとおりです。
601: "Some text here"
550: "Some text "
527: "Some text here"
504: "Some text here"
466: "Some text here"
Textframe 550 は、私が与えたものの最後の単語を常に省略します。
もう 1 つの問題は、テキスト フレームに適度な長さの文字列を指定すると、切り捨てられることです。各テキスト フレームのコンテンツを「ここには非常に長いテキストがあり、さまざまなテキスト フレームがさまざまなポイントで切り取られます。」に設定しようとすると、結果は次のようになります。
601: "Here is some very long "
550: "Here is some very long text "
527: "Here is some very long text which different textframes will "
504: "Here is some "
466: "Here is some "
奇妙なのは、カットオフされたテキストが「記憶」され、次にスクリプトを実行したときに、渡したものの最後にジャンクとして再挿入されることです。そのため、スクリプトを再実行して各テキストを変更しようとするとフレームを「スパム」などの非常に短いものにすると、次の結果が得られます。
601: "Spamtext which different "
550: "Spamwhich different "
527: "Spamcut off at different points."
504: "Spamvery "
466: "Spamvery long text "
そして、もう一度実行しようとすると、次のようになります。
601: "Spamtextframes will cut "
550: ""
527: "Spam"
504: "Spamlong "
466: "Spamwhich "
など、古いテキストがなくなるまで。
IDS を再起動してもこの問題は解決しないため、(おそらく) 何らかの方法でドキュメントに保存する必要があります。
スクリプトを実行して IDS の再起動をテストしていたので、古いテキストをすべてフラッシュすると、テキストフレーム 504 が各送信の最後の単語もスキップし始めました...
この動作の原因と、IDSにテキストフレームを指定したものに変更させる方法はありますか?