我正在尝试使用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总是省略我给它的最后一个单词。
另一个问题是,如果我给任何文本框架一个甚至中等长度的字符串,它就会被切断。如果我尝试将每个文本框的内容设置为“这是一些非常长的文本,不同的文本框架将在不同的点上切断。”,结果如下:
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重启时,当我刷新所有旧文本时,textframe 504也开始跳过每个提交的最后一个单词...
知道是什么导致了这种行为,以及我如何才能让IDS将textframes更改为我给它的任何内容?
答案 0 :(得分:2)
我在使用textframe.contents时遇到问题,具体取决于所涉及的文本框架的大小。请尝试设置textframe.parentStory.contents。