Skip to main content
Inspiring
November 30, 2023
Question

Remove the parent textframe of the images

  • November 30, 2023
  • 1 reply
  • 339 views

Hi,

 

Using the script to remove the parent image text frame, I was unable to remove the parent frame after executing the script. Please find attached the script. Could you please guide us on this matter?  

 

 

 

var xOffset = 150;
var yOffset = 37.5;
var pageWidth = 480;
var pageHeight = 540;
var frameX = 60;
var frameY = 640;
var frameWidth = 50;
var frameHeight = 50;
var doc = app.activeDocument;
for (var i = 0; i < doc.pages.length; i++) {
  var page = doc.pages[i];
  var pageHeight = page.bounds[2] - page.bounds[0];
  var textframeheight = page.textFrames.length;
  var imageFrames = []; // Create an empty array to store image frames
  var imageNamesArray = [];
  // Loop through all text frames on the page
  for (var j = 0; j < textframeheight; j++) {
    var frame = page.textFrames[j];
  if (frame.associatedXMLElement && frame.associatedXMLElement.markupTag) {
      var markupTagName = frame.associatedXMLElement.markupTag.name;
else if (frame.associatedXMLElement.markupTag.name == 'category_name') {  
      var pagedetails = page.allPageItems.length;
      for (var n = 0; n < pagedetails; n++) {          
        if (page.allPageItems[n] instanceof Image) {
           var pageItem = page.allPageItems[n]; 
          var parentFrame = page.allPageItems[n].parent;
          var imageName = page.allPageItems[n].itemLink.name;
       var xmlString = ReadXMLFileDetails();
var xmlDoc = new XML(xmlString);
// Define the XPath expression
var imageTypeElement = xmlDoc.xpath("//image_type");

// Check if the image_type element exists
if (imageTypeElement != null && imageTypeElement != '') {
    // Extract values from the image_type element
    var imageNodes = imageTypeElement.children();
    var imageFiles = [];
    var splitImageFiles = [];
    var imageNamesArray = [];

    for (var img = 0; img < imageNodes.length(); img++) {
        var imageFileAttribute = imageNodes[img].attribute("IMAGE_FILE");
        if (imageFileAttribute != null && imageFileAttribute != '') {
            var imageFile = imageFileAttribute.toString();
            imageFiles.push(imageFile);
            splitImageFiles.push(imageFile.split(','));
        }
    }

    for (var spltimg = 0; spltimg < splitImageFiles.length; spltimg++) {
        if (splitImageFiles[spltimg].join(', ') != null && splitImageFiles[spltimg].join(', ') != '') {
            imageNamesArray.push(splitImageFiles[spltimg].join(', '));
        }
    }
} else {
    alert("Error: 'image_type' element not found in XML.");
}
           for (var k = 0; k < imageNamesArray.length; k++) {
//~   // Get the path to the image file
   var imagePath = FolderPath() + "/" + imageNamesArray[k];
  var activePage = app.activeWindow.activePage;
  var activePageNum = activePage.documentOffset;
   var currentFrameX = frameX + k * (frameWidth + 10);
   var newFrame = activePage.textFrames.add({geometricBounds: [frameY, currentFrameX, frameY + frameHeight, currentFrameX + frameWidth]});
   var placedItem = newFrame.place(File(imagePath));
  newFrame.fit(FitOptions.proportionally);
 }
for (var t = 0;t < page.allPageItems.length; t++) {
        if (page.allPageItems[t] instanceof Image) {
            var parentFrame = page.allPageItems[t].parent;
            parentFrame.remove();
        }
    }
        }
      }
    }
}

}
}

function ReadXMLFileDetails()
{
	
		myDoc = app.activeDocument;
		myLinks = myDoc.links;
		for (j = myLinks.length - 1; j >= 0; j--)
		{  
			myName = myLinks[j].filePath; 
			var ext =  myName.substring(myName.length-3,myName.length) ;
			if (ext=="xml")
			{   
				var myXMLFile = File(myName);  
				var myResult = myXMLFile.open("r", undefined, undefined); 
				if(myResult == true)
				{ 
				var myXMLDefaults = myXMLFile.read(); 
               // alert(myXMLDefaults)
				myXMLFile.close(); 
				var myXMLDefaults = new XML(myXMLDefaults); 
				return myXMLDefaults;
				}			
		}//for
	}	
}
function FolderPath()
{// Get the active document
var partBeforeImages
var doc = app.activeDocument;
for (var k = 0; k < doc.links.length; k++) {
    var link = doc.links[k];
    var filePath = link.filePath;
    var file = new File(filePath);
    var folderPath = file.parent.fsName;
     if (folderPath.indexOf("Images") !== -1) {
        // Split folderPath based on the word "Images"
        var pathParts = folderPath.split("Images");
         partBeforeImages= pathParts[0];
        var partAfterImages = pathParts[1];
    }
   
}
return partBeforeImages;
}

 

This topic has been closed for replies.

1 reply

rob day
Community Expert
Community Expert
November 30, 2023

Hi @MonishaRajendran , Have you checked what the parent of the image is before remove()?

Add $.writeln(parentFrame) before parentFrame.remove() and check your console.
Inspiring
November 30, 2023

@rob day  Yeah, I have checked for the parentFrame but the textframe is not removed

-Monisha
rob day
Community Expert
Community Expert
November 30, 2023

What Object(s) does the .writeln return? Are they all the same?