Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loop through all threadded text frames in JavaScript InDesign script?

I'm trying to create an InDesign script that functions exactly like SplitStory.jsx, only that it won't require first selecting a threaded text frame but instead loops through everything that is threaded/linked within the whole document.

Here is what I have so far, but it doesn't seem to be doing anything. I'm pretty new to scripting.

main();
function main(){
    //Make certain that user interaction (display of dialogs, etc.) is turned on.
    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
    if(app.documents.length != 0){
        var myDoc = app.activeDocument;
        var myStories = 0;
        for (var i = 0; myDoc.stories.length > i; i++)
            myStories = myDoc.stories[i];
            mySplitStory(myStories);
            myRemoveFrames(myStories);
    }
    else{
        alert("Please open a document and try again.");
    }
}
function mySplitStory(myStory){
    var myTextFrame;
    //Duplicate each text frame in the story.
    for(var myCounter = myStory.textContainers.length-1; myCounter >= 0; myCounter --){
        myTextFrame = myStory.textContainers[myCounter];
        myTextFrame.duplicate();
    }
}
function myRemoveFrames(myStory){
    //Remove each text frame in the story. Iterate backwards to avoid invalid references.
    for(var myCounter = myStory.textContainers.length-1; myCounter >= 0; myCounter --){
        myStory.textContainers[myCounter].remove();
    }
}

I feel like I need to add something to mySplitStory(myStories); like mySplitStory(myStories.currentStory);, but I can't find anything about this specifically online (or in Adobe's scripting documentation - but maybe I'm not looking in the right places).

Any help would be greatly appreciated!

like image 993
Arktype Avatar asked Sep 16 '26 04:09

Arktype


1 Answers

Here is a very simple script that will allow you to loop through all textFrames within a document and then do whatever you need with the threaded text frames. Basically if any given textFrame has a textFrame object for nextTextFrame or previousTextFrame you know it's threaded.

test();
function test(){

    var myDoc = app.open('c:/123.indd');

    //get all textframes:
    var allTextFrames = myDoc.textFrames;

    for(var i=0;i<allTextFrames.length;i++){
        var tf = allTextFrames[i];

        if(tf.nextTextFrame != null || tf.previousTextFrame != null){

           //text frame is threaded, do work:
        }
    }
}

Hope this helps!!

like image 184
lhan Avatar answered Sep 18 '26 17:09

lhan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!