按页获取所有文本

Get all text by page

正在为 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);

但是如果你有多个故事,那就更复杂了。也许您需要从每个故事中获取页面拆分文本,然后弄清楚如果它们共享同一页面,如何连接来自不同故事的文本。