Skip to main content
Participating Frequently
December 14, 2016
Question

Export text from grouped items

  • December 14, 2016
  • 1 reply
  • 550 views

I have found the following script, that does a really good job of exporting all text from an InDesign document in a chosen format. The only problem seems to be, that text from grouped objects is not exported. Could anybody help to tweak the script to handle these items as well?

if(app.documents.length != 0){

     if(app.documents.item(0).stories.length != 0){

          myGetFileName(app.documents.item(0).name);

     }

}

//========================= FUNCTIONS ===========================

function myGetFileName(myDocumentName){

     var myFilePath = File.saveDialog("Save Exported Text As:");

     if(myFilePath != null){

          myDisplayDialog(myDocumentName, myFilePath);

     }

}

//--------------------------------------------------------------------------------------------------------------

function myDisplayDialog(myDocumentName, myFilePath){

     //Need to get export format, story separator.

     var myExportFormats = ["Text Only", "Tagged Text", "RTF"];

     var myDialog = app.dialogs.add({name:"ExportAllStories"});

     with(myDialog.dialogColumns.add()){

          with(dialogRows.add()){

               with(dialogColumns.add()){

                    var myExportFormatDropdown = dropdowns.add({stringList:myExportFormats, selectedIndex:2});

               }

          }

          with(dialogRows.add()){

               var myAddSeparatorCheckbox = checkboxControls.add({staticLabel:"Add separator line", checkedState:true});

          }

     }

     var myResult = myDialog.show();

     if(myResult == true){

          var myExportFormat = myExportFormats[myExportFormatDropdown.selectedIndex];

          var myAddSeparator = myAddSeparatorCheckbox.checkedState;

          myDialog.destroy();

          myExportAllText(myDocumentName, myFilePath, myExportFormat, myAddSeparator);

     }

     else{

          myDialog.destroy();

     }

}

//--------------------------------------------------------------------------------------------------------------

function myExportAllText(myDocumentName, myFilePath, myExportFormat, myAddSeparator){

     var myPage, myStory;

     var myExportedStories = [];

     var myTempFolder = Folder.temp;

     var myTempFile = File(myTempFolder + "/tempTextFile.txt");

     var myNewDocument = app.documents.add();

     var myDocument = app.documents.item(myDocumentName);

     var myTextFrame = myNewDocument.pages.item(0).textFrames.add({geometricBounds:myGetBounds(myNewDocument, myNewDocument.pages.item(0))});

     var myNewStory = myTextFrame.parentStory;

     for (var i = 0; i < myDocument.pages.length; i++) {

          myPage = myDocument.pages.item(i);

          for (var t = 0; t < myPage.textFrames.length; t++){

               myStory = myPage.textFrames.parentStory;

               if (!IsInArray(myStory.id, myExportedStories)) {

                    //Export the story as tagged text.

                    myStory.exportFile(ExportFormat.taggedText, myTempFile);

                    myExportedStories.push(myStory.id);

                    //Import (place) the file at the end of the temporary story.

                    myNewStory.insertionPoints.item(-1).place(myTempFile);

                    //If the imported text did not end with a return, enter a return

                    //to keep the stories from running together.

                    if(i != myDocument.stories.length -1){

                         if(myNewStory.characters.item(-1).contents != "\r"){

                              myNewStory.insertionPoints.item(-1).contents = "\r";

                         }

                         if(myAddSeparator == true){

                              myNewStory.insertionPoints.item(-1).contents = "----------------------------------------\r";

                         }

                    }

               } // if not exported

          } // for text frames

     } // for pages

     switch(myExportFormat){

          case "Text Only":

               myFormat = ExportFormat.textType;

               myExtension = ".txt"

               break;

          case "RTF":

               myFormat = ExportFormat.RTF;

               myExtension = ".rtf"

               break;

          case "Tagged Text":

               myFormat = ExportFormat.taggedText;

               myExtension = ".txt"

               break;

     }

     myNewStory.exportFile(myFormat, File(myFilePath));

     myNewDocument.close(SaveOptions.no);

     myTempFile.remove();

}

//--------------------------------------------------------------------------------------------------------------

function myGetBounds(myDocument, myPage){

     var myPageWidth = myDocument.documentPreferences.pageWidth;

     var myPageHeight = myDocument.documentPreferences.pageHeight

     if(myPage.side == PageSideOptions.leftHand){

          var myX2 = myPage.marginPreferences.left;

          var myX1 = myPage.marginPreferences.right;

     }

     else{

          var myX1 = myPage.marginPreferences.left;

          var myX2 = myPage.marginPreferences.right;

     }

     var myY1 = myPage.marginPreferences.top;

     var myX2 = myPageWidth - myX2;

     var myY2 = myPageHeight - myPage.marginPreferences.bottom;

     return [myY1, myX1, myY2, myX2];

}

//--------------------------------------------------------------------------------------------------------------

function IsInArray(myString, myArray) {

     for (x in myArray) {

          if (myString == myArray) {

               return true;

          }

     }

     return false;

}

This topic has been closed for replies.

1 reply

Community Expert
December 14, 2016

Hi,
I would ask the author of that script.

Regards,
Uwe

TerkelsenAuthor
Participating Frequently
December 14, 2016

I certainly would, if I knew who wrote the original script :-)

Wosven
Participating Frequently
December 16, 2016

Hi,

You can look at: https://forums.adobe.com/thread/733900

or change/use this part of code:

// by groups

var theGroups = myDocument.pages

.groups;

for(var g = 0, gln = theGroups.length; g < gln; g++){

    var grp = theGroups;

    for(var t = 0; t < grp.textFrames.length;t++){

        b = grp.textFrames;

        if (b instanceof TextFrame) {

            // code here...

        }

    }

}


Swo