如何解决按页面获取所有文本
深入研究为 Indesign 编写一些脚本。我想按每个页面(按顺序)抓取所有文本。
我编写了一个函数来通过故事来做到这一点。但是,我想对故事进行排序,以便它们逐页显示。
在这种情况下使用 for (var i = 0; i < app.activeDocument.pages.length; i++)
没有用。我不确定故事 ID 与页面展示位置有何关联。
这就是我所拥有的
function get_all_stories()
{
var str = "";
var CR = "\r\n"; // carriage return
for(var i = 0; i < app.activeDocument.stories.length; i++)
{
var myStory = app.activeDocument.stories.item(i);
// add contents to string
str += myStory.contents + CR + CR;
}
return str;
}
有什么想法吗?
解决方法
您可以遍历所有字符并检查页面属于该字符的parentTextFrame
。如果下一个字符与前一个字符属于同一页面,则将其连接为一个字符串。一旦页面被更改,你就会创建下一个字符串。等等。这样你就可以得到一个给定故事的字符串页面数组:
var texts = [];
var text_on_page = "";
var story = app.activeDocument.stories[0];
var chars = story.texts[0].characters.everyItem().getElements();
var current_page = chars[0].parentTextFrames[0].parentPage.name;
var prev_page = current_page;
for (var i=0; i<chars.length; i++) {
var ch = chars[i];
current_page = ch.parentTextFrames[0].parentPage.name;
if (current_page == prev_page) {
text_on_page += ch.contents;
}
else {
prev_page = current_page;
texts.push(text_on_page);
text_on_page = ch.contents;
}
}
texts.push(text_on_page); // text from last page
// print report
var report = ""
for (var i=0; i<texts.length; i++) {
report += "\nPage " + (i+1) + " contains: '" + texts[i] + "'\n";
}
alert(report);
但是如果你有几个故事会更复杂。也许您需要从每个故事中获取分页文本,然后弄清楚如何将来自不同故事的文本连接起来,如果它们共享同一页面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。