• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
6

Adjust Export All Stories to ignore locked text frames

Contributor ,
Oct 17, 2023 Oct 17, 2023

Copy link to clipboard

Copied

InDesign has this built-in script ... wondering if someone can help me adjsut it and add a condition to it to ignore text frames that are locked OR on a layer thats locked

//ExportAllStories.jsx
//An InDesign JavaScript
/*  
@@@BUILDINFO@@@ "ExportAllStories.jsx" 3.0.0 15 December 2009
*/
//Exports all stories in an InDesign document in a specified text format.
//
//For more on InDesign/InCopy scripting see the documentation included in the Scripting SDK 
//available at http://www.adobe.com/devnet/indesign/sdk.html
//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com
//
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){
		if (app.activeDocument.stories.length != 0){
			myDisplayDialog();
		}
		else{
			alert("The document does not contain any text. Please open a document containing text and try again.");
		}
	}
	else{
		alert("No documents are open. Please open a document and try again.");
	}
}
function myDisplayDialog(){
	with(myDialog = app.dialogs.add({name:"ExportAllStories"})){
		//Add a dialog column.
		myDialogColumn = dialogColumns.add()	
		with(myDialogColumn){
			with(borderPanels.add()){
				staticTexts.add({staticLabel:"Export as:"});
				with(myExportFormatButtons = radiobuttonGroups.add()){
					radiobuttonControls.add({staticLabel:"Text Only", checkedState:true});
					radiobuttonControls.add({staticLabel:"RTF"});
					radiobuttonControls.add({staticLabel:"InDesign Tagged Text"});
				}
			}
		}
		myReturn = myDialog.show();
		if (myReturn == true){
			//Get the values from the dialog box.
			myExportFormat = myExportFormatButtons.selectedButton;
			myDialog.destroy;
			myFolder= Folder.selectDialog ("Choose a Folder");
			if((myFolder != null)&&(app.activeDocument.stories.length !=0)){
				myExportAllStories(myExportFormat, myFolder);
			}
		}
		else{
			myDialog.destroy();
		}
	}
}
//myExportStories function takes care of exporting the stories.
//myExportFormat is a number from 0-2, where 0 = text only, 1 = rtf, and 3 = tagged text.
//myFolder is a reference to the folder in which you want to save your files.
function myExportAllStories(myExportFormat, myFolder){
	for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
		myStory = app.activeDocument.stories.item(myCounter);
		myID = myStory.id;
		switch(myExportFormat){
			case 0:
				myFormat = ExportFormat.textType;
				myExtension = ".txt"
				break;
			case 1:
				myFormat = ExportFormat.RTF;
				myExtension = ".rtf"
				break;
			case 2:
				myFormat = ExportFormat.taggedText;
				myExtension = ".txt"
				break;
		}
		myFileName = "StoryID" + myID + myExtension;
		myFilePath = myFolder + "/" + myFileName;
		myFile = new File(myFilePath);
		myStory.exportFile(myFormat, myFile);
	}
}
TOPICS
How to , Import and export , Scripting

Views

158

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 26, 2023 Oct 26, 2023

Copy link to clipboard

Copied

Haven't tested it cos not sure how to test it for your scenario

 

//ExportAllStories.jsx
//An InDesign JavaScript

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){
        if (app.activeDocument.stories.length != 0){
            myDisplayDialog();
        }
        else{
            alert("The document does not contain any text. Please open a document containing text and try again.");
        }
    }
    else{
        alert("No documents are open. Please open a document and try again.");
    }
}

function myDisplayDialog(){
    with(myDialog = app.dialogs.add({name:"ExportAllStories"})){
        //Add a dialog column.
        myDialogColumn = dialogColumns.add();	
        with(myDialogColumn){
            with(borderPanels.add()){
                staticTexts.add({staticLabel:"Export as:"});
                with(myExportFormatButtons = radiobuttonGroups.add()){
                    radiobuttonControls.add({staticLabel:"Text Only", checkedState:true});
                    radiobuttonControls.add({staticLabel:"RTF"});
                    radiobuttonControls.add({staticLabel:"InDesign Tagged Text"});
                }
            }
        }
        myReturn = myDialog.show();
        if (myReturn == true){
            //Get the values from the dialog box.
            myExportFormat = myExportFormatButtons.selectedButton;
            myDialog.destroy;
            myFolder= Folder.selectDialog ("Choose a Folder");
            if((myFolder != null)&&(app.activeDocument.stories.length !=0)){
                myExportAllStories(myExportFormat, myFolder);
            }
        }
        else{
            myDialog.destroy();
        }
    }
}

//myExportStories function takes care of exporting the stories.
//myExportFormat is a number from 0-2, where 0 = text only, 1 = rtf, and 3 = tagged text.
//myFolder is a reference to the folder in which you want to save your files.
function myExportAllStories(myExportFormat, myFolder){
    for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
        myStory = app.activeDocument.stories.item(myCounter);
        // Check if the story's text frame or its layer is locked, if so, skip exporting.
        if (!isTextFrameOrLayerLocked(myStory.parentTextFrames[0]) && !isLayerLocked(myStory.parentTextFrames[0].parent)){
            myID = myStory.id;
            switch(myExportFormat){
                case 0:
                    myFormat = ExportFormat.textType;
                    myExtension = ".txt";
                    break;
                case 1:
                    myFormat = ExportFormat.RTF;
                    myExtension = ".rtf";
                    break;
                case 2:
                    myFormat = ExportFormat.taggedText;
                    myExtension = ".txt";
                    break;
            }
            myFileName = "StoryID" + myID + myExtension;
            myFilePath = myFolder + "/" + myFileName;
            myFile = new File(myFilePath);
            myStory.exportFile(myFormat, myFile);
        }
    }
}

// Function to check if a text frame is locked
function is

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 26, 2023 Oct 26, 2023

Copy link to clipboard

Copied

@Eugene Tyson you did not share the definition for the methods isLayerLocked and isTextFrameOrLayerLocked. Also, the parent of a pageItem would not be layer but spread in case of a non anchored frame, we can use the itemLayer property.

The following code can be tried.

//ExportAllStories.jsx
//An InDesign JavaScript
/*  
@@@BUILDINFO@@@ "ExportAllStories.jsx" 3.0.0 15 December 2009
*/
//Exports all stories in an InDesign document in a specified text format.
//
//For more on InDesign/InCopy scripting see the documentation included in the Scripting SDK 
//available at http://www.adobe.com/devnet/indesign/sdk.html
//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com
//
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){
		if (app.activeDocument.stories.length != 0){
			myDisplayDialog();
		}
		else{
			alert("The document does not contain any text. Please open a document containing text and try again.");
		}
	}
	else{
		alert("No documents are open. Please open a document and try again.");
	}
}
function myDisplayDialog(){
	with(myDialog = app.dialogs.add({name:"ExportAllStories"})){
		//Add a dialog column.
		myDialogColumn = dialogColumns.add()	
		with(myDialogColumn){
			with(borderPanels.add()){
				staticTexts.add({staticLabel:"Export as:"});
				with(myExportFormatButtons = radiobuttonGroups.add()){
					radiobuttonControls.add({staticLabel:"Text Only", checkedState:true});
					radiobuttonControls.add({staticLabel:"RTF"});
					radiobuttonControls.add({staticLabel:"InDesign Tagged Text"});
				}
			}
		}
		myReturn = myDialog.show();
		if (myReturn == true){
			//Get the values from the dialog box.
			myExportFormat = myExportFormatButtons.selectedButton;
			myDialog.destroy;
			myFolder= Folder.selectDialog ("Choose a Folder");
			if((myFolder != null)&&(app.activeDocument.stories.length !=0)){
				myExportAllStories(myExportFormat, myFolder);
			}
		}
		else{
			myDialog.destroy();
		}
	}
}
//myExportStories function takes care of exporting the stories.
//myExportFormat is a number from 0-2, where 0 = text only, 1 = rtf, and 3 = tagged text.
//myFolder is a reference to the folder in which you want to save your files.
function myExportAllStories(myExportFormat, myFolder){
	for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
		myStory = app.activeDocument.stories.item(myCounter);
		if (myStory.parentTextFrames[0].locked)
    		continue;

		if(myStory.parentTextFrames[0].itemLayer.locked)
    		continue;

		myID = myStory.id;
		switch(myExportFormat){
			case 0:
				myFormat = ExportFormat.textType;
				myExtension = ".txt"
				break;
			case 1:
				myFormat = ExportFormat.RTF;
				myExtension = ".rtf"
				break;
			case 2:
				myFormat = ExportFormat.taggedText;
				myExtension = ".txt"
				break;
		}
		myFileName = "StoryID" + myID + myExtension;
		myFilePath = myFolder + "/" + myFileName;
		myFile = new File(myFilePath);
		myStory.exportFile(myFormat, myFile);
	}
}

P.S. :- Note the following points as well

  • Anchored frames or frames within a cell are not catered to
  • The first frame of a thread is considered to check for the condition of locking

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 26, 2023 Oct 26, 2023

Copy link to clipboard

Copied

LATEST

Ah I see - thanks for the additional info! Good to know 🙂 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines