var myDoc = app.activeDocument;
var myAllLinks = myDoc.allGraphics;
var myMultipleLinks = new Array();
var myLinksCounter = 1;
var myPrepend = prompt("Example: thebook_08765", "Job description", "Please enter job description");
if (!myPrepend) exit();
var response = confirm("Warning: You are about to rename all images linked to the foremost Indesign Document - proceed? Keep in mind - it is not reversible!", false, "Rename Links Script");
if ( response == true )
{
WriteToFile("\r--------------------- Script started -- " + GetDate() + " ---------------------\n\n");
for ( k = 0; k < myAllLinks.length; k++ )
{
var myLinkName = myAllLinks[k].itemLink.name;
}
crearLabels();
var myPages = myDoc.pages;
// Pages
for ( p = 0; p < myPages.length; p++ )
{
var myPageNumber = pad000(myPages[p].name);
var myLinks = myPages[p].allGraphics;
var myASCII = 97;
for ( k = myLinks.length - 1; k >= 0; k-- )
{
var myLink = myLinks[k].itemLink;
if (myLink.extractLabel("relinked") != "yes") {
var myOldLinkName = myLink.name;
var myLinkUsage = LinkUsage( myLink );
var myExtension = myOldLinkName.substr(myOldLinkName.lastIndexOf( "." ));
if (LinkUsage(myLink) == 1)
{
var myNewLinkName = myPrepend + myPageNumber + String.fromCharCode( myASCII ) + myExtension;
var myOldImageHDfile = new File( myLink.filePath );
var myRenameResult = myOldImageHDfile.rename( myNewLinkName );
if (myRenameResult) {
myLink.insertLabel("relinked", "yes");
myLink.relink( myOldImageHDfile );
try {
myLink = myLink.update();
}
catch(err) {}
myASCII++;
WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");
myLinksCounter++;
}
else {
if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + " because the file already exists\n");
}
else {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");
}
}
}
else {
if (!IsObjInArray(myLink, myMultipleLinks)) {
myMultipleLinks.push(myLink);
}
}
}
}
}
var myMasterSpreads = myDoc.masterSpreads;
// Master spreads
for ( m = 0; m < myMasterSpreads.length; m++ )
{
var myMastSpr = myMasterSpreads[m];
var myPageNumber = myMastSpr.name;
var myPrefix = myMastSpr.namePrefix;
var myLinks = myMastSpr.allGraphics;
var myASCII = 97;
for ( n = myLinks.length - 1; n >= 0; n-- )
{
var myLink = myLinks[n].itemLink;
if (myLink.extractLabel("relinked") != "yes") {
var myOldLinkName = myLink.name;
var myExtension = myOldLinkName.substr(myOldLinkName.lastIndexOf( "." ));
if (LinkUsage(myLink) == 1)
{
var myLinkLetter = (myLinks.length == 1) ? "" : String.fromCharCode( myASCII );
var myNewLinkName = myPrepend + '_master_' + myPrefix + myLinkLetter + myExtension;
var myOldImageHDfile = new File( myLink.filePath );
var myRenameResult = myOldImageHDfile.rename( myNewLinkName );
if (myRenameResult) {
myLink.insertLabel("relinked", "yes");
myLink.relink( myOldImageHDfile );
try {
myLink.update();
}
catch(err) {}
myASCII++;
WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");
myLinksCounter++;
}
else {
if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + " because the file already exists\n");
}
else {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");
}
}
}
else
{
if (!IsObjInArray(myLink, myMultipleLinks)) {
myMultipleLinks.push(myLink);
}
}
}
}
}
// Multiple images
if (myMultipleLinks.length > 0) {
for ( a = myMultipleLinks.length - 1; a >= 0; a-- )
{
processMultiUsedLinks(myMultipleLinks[a]);
}
}
WriteToFile("\r--------------------- Script finished -- " + GetDate() + " ---------------------\r\r");
if (myLinksCounter == 0) {
alert("No links have been renamed", "Rename Links Script");
}
if (myLinksCounter == 1) {
alert("One link has been renamed", "Rename Links Script");
}
else if (myLinksCounter > 1) {
alert(myLinksCounter + " links have been renamed", "Rename Links Script");
}
}
//--------------------------------------------- Functions ------------------------------------------------
// Check how many times the link was placed
function LinkUsage(myLink) {
var myLinksNumber = 0;
for (var c = 0; c < myDoc.links.length; c++) {
if (myLink.filePath == myDoc.links[c].filePath) {
myLinksNumber += 1;
}
}
return myLinksNumber;
}
//--------------------------------------------------------------------------------------------------------------
// Relink the links placed more than once
function processMultiUsedLinks(myLink) {
var myExtension = myLink.name.substr(myLink.name.lastIndexOf( "." ));
var myMultiUsedLink = new Array();
var myAllLinks = myDoc.links;
for (var d = 0; d < myAllLinks.length; d++) {
if (myAllLinks[d].filePath == myLink.filePath) {
myMultiUsedLink.push(myAllLinks[d]);
}
}
try {
myLink.show();
}
catch(err) {}
var myNewLinkName = prompt ("Enter a name for this image", GetFileNameOnly(myLink.name), "This image is placed " + myMultiUsedLink .length + " times");
if (myNewLinkName) {
if ( myNewLinkName + myExtension != myLink.name ) {
var myOldImageHDfile = new File( myLink.filePath );
var myRenameResult = myOldImageHDfile.rename( myNewLinkName + myExtension );
if (myRenameResult) {
myLink.insertLabel("relinked", "yes");
myLink.relink( myOldImageHDfile );
try {
myLink = myLink.update();
}
catch(err) {}
WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");
myLinksCounter++;
for (f = myMultiUsedLink.length-1; f >= 0 ; f--)
{
var myCurrLink = myMultiUsedLink[f];
if ( myNewLinkName + myExtension != myCurrLink.name ) {
myCurrLink.insertLabel("relinked", "yes");
myCurrLink.relink( myOldImageHDfile );
try {
myCurrLink = myLink.update();
}
catch(err) {}
}
}
}
else {
if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + myExtension + " because the file already exists\n");
}
else {
WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");
}
}
}
}
UpdateAllOutdatedLinks();
}
//--------------------------------------------------------------------------------------------------------------
// Clear labels in case this script has been already run on the current document
function crearLabels() {
for (var f = 0; f < myDoc.links.length; f++) {
if (myDoc.links[f].extractLabel("relinked") != "") {
myDoc.links[f].insertLabel("relinked", "");
}
}
}
//--------------------------------------------------------------------------------------------------------------
function UpdateAllOutdatedLinks() {
for(var myCounter = myDoc.links.length-1; myCounter >= 0; myCounter--){
var myLink = myDoc.links[myCounter];
if (myLink.status == LinkStatus.linkOutOfDate){
myLink.update();
}
}
}
//--------------------------------------------------------------------------------------------------------------
function pad000(myNumber) {
if (myNumber >= 1 && myNumber <= 9) {
x = "0" + "0" + myNumber;
} else if (myNumber >= 10 && myNumber <= 99) {
x = "0" + myNumber;
} else if (myNumber >= 100 && myNumber <= 999) {
x = myNumber;
}
return x;
}
//--------------------------------------------------------------------------------------------------------------
function GetFileNameOnly(myFileName) {
var myString = "";
var myResult = myFileName.lastIndexOf(".");
if (myResult == -1) {
myString = myFileName;
}
else {
myString = myFileName.substr(0, myResult);
}
return myString;
}
//--------------------------------------------------------------------------------------------------------------
function IsObjInArray(myObj, myArray) {
for (x in myArray) {
if (myObj.filePath == myArray[x].filePath) {
return true;
}
}
return false;
}
//--------------------------------------------------------------------------------------------------------------
function WriteToFile(myText) {
myFile = new File("~/Desktop/Rename Links Script.txt");
if ( myFile.exists ) {
myFile.open("e");
myFile.seek(0, 2);
}
else {
myFile.open("w");
}
myFile.write(myText);
myFile.close();
}
//--------------------------------------------------------------------------------------------------------------
function GetDate() {
var myDate = new Date();
if ((myDate.getYear() - 100) < 10) {
var myYear = "0" + new String((myDate.getYear() - 100));
} else {
var myYear = new String ((myDate.getYear() - 100));
}
var myDateString = (myDate.getMonth() + 1) + "/" + myDate.getDate() + "/" + myYear + " " + myDate.getHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds();
return myDateString;
}
//------------------------------------------------------------------------------------------------------