Copy link to clipboard
Copied
HI everyone, does anyone have a script that can: choose missing links from the active document and relink them to the folder that we also put its path into the script, so that i only need press 1 button to do it?
Here I wrote a quick & dirty script for you.
Change the path variable in line 9 to whatever the path you want.
Select an image with black or white arrow and run the script.
...var scriptName = "Relink selected link to folder",
doc;
PreCheck();
//===================================== FUNCTIONS ======================================
function Main(image) {
var file,
path = "/E/Archive/My folder/", // type the path to your folder here
link = image.itemLink;
if (link.status == LinkStatus.LINK_M
Copy link to clipboard
Copied
Hi,
Hope this helps!!
Get the missing links from server
Re: need to relink missing links to files with extensions
Thanks,
Prabu G
Copy link to clipboard
Copied
Thank Prabu G, its nearly exactly what I am looking for. But one more thing, it is possible to put the path of the folder into the script, so I dont need to choose the folder anymore.
Copy link to clipboard
Copied
But one more thing, it is possible to put the path of the folder into the script, so I dont need to choose the folder anymore.
I didn't look carefully into the script, but I'd made the following adjustments:
Note: the script processes all open documents and looks for the images starting from the 'root' folder and down there.
Below is my (quick & dirty) modified (totally untested) version:
var i, j, searchfolder;
for (j=0; j<app.documents.length; j++) {
doc = app.documents
;
imgs = doc.links;
path = "/E/Archive"; // type here the path for the folder to start
searchfolder = new Folder(path);
for (i=0; i<imgs.length; i++)
{
// Missing?
$.writeln("Image "+i);
if (imgs.status == LinkStatus.LINK_MISSING)
{
$.writeln("Missing: "+imgs.name+" lookign in "+searchfolder);
// Do we have a file?
imglist = findAnyFileDownThere(imgs.name, searchfolder);
$.writeln("Found "+imglist.length+" possible replacements.");
if (imglist.length == 1)
{
// Oh yeah
imgs.relink(imglist[0]);
$.writeln("Relinked to "+imglist[0]);
}
}
}
}
function findAnyFileDownThere (filename, path)
{
var result, folderList, fl;
result = Folder(path).getFiles (filename+".*");
if (result.length > 0)
return result;
folderList = Folder(path).getFiles(function(item) { return item instanceof Folder && !item.hidden; });
for (fl=0; fl<folderList.length; fl++)
{
$.writeln("Looking in: "+path+"/"+folderList[fl].name);
result = findAnyFileDownThere (filename, path+"/"+folderList[fl].name);
if (result.length > 0)
return result;
}
return [];
}
Copy link to clipboard
Copied
Thank you so much Kasyan. I make over 100 documents per day and about 100 photos in each document need to be relinked to only 1 folder. Yes the feature "Relink to folder" is the way I am doing. But in each document, some photos are already relinked and some are not. I just want to speed up workflow by only "pressing a button" and the scipt will: choose missing links in the document I am working on, and relink them to the folder I want (and i want to pass through the dialog box "choosing folder" because I have only 1 folder)
And i am apreciated about the script above but sadly it didnt work .
Copy link to clipboard
Copied
And i am apreciated about the script above but sadly it didnt work
I just tested the script against a simple test file and it did work for me, though it took about a dozen of secs since it processes all subfolders.
Before
After
Copy link to clipboard
Copied
Here I wrote a quick & dirty script for you.
Change the path variable in line 9 to whatever the path you want.
Select an image with black or white arrow and run the script.
var scriptName = "Relink selected link to folder",
doc;
PreCheck();
//===================================== FUNCTIONS ======================================
function Main(image) {
var file,
path = "/E/Archive/My folder/", // type the path to your folder here
link = image.itemLink;
if (link.status == LinkStatus.LINK_MISSING) {
file = new File(path + link.name);
if (file.exists) {
link.relink(file);
}
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
function PreCheck() {
var image;
if (app.documents.length == 0) ErrorExit("Please open a document and try again.", true);
doc = app.activeDocument;
if (doc.converted) ErrorExit("The current document has been modified by being converted from older version of InDesign. Please save the document and try again.", true);
if (!doc.saved) ErrorExit("The current document has not been saved since it was created. Please save the document and try again.", true);
if (app.selection.length == 0) ErrorExit("Nothing is selected.", true);
if (app.selection[0].constructor.name == "Image") {
image = app.selection[0];
}
else if (app.selection[0].images.length == 1) {
image = app.selection[0].images[0];
}
else {
ErrorExit("There's no image in selection.", true);
}
Main(image);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
function ErrorExit(error, icon) {
alert(error, scriptName, icon);
exit();
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------
Copy link to clipboard
Copied
Hi Kas Servetsky, you are right!!!!!!!!!!!!!!!!!!!! I've just tested the first script again and it works with the folder in my Mac. Yesterday I did with one in our company server so i think i put the wrong path. I'm so sorry about the wrong issue, and thank you so much!
Copy link to clipboard
Copied
Glad to hear that you sorted it out yourself!
Copy link to clipboard
Copied
Hi Kasyan,
with InDesign CC 2018 and above there is a new method to relink links:
reinitLink()
DOM documentation:
https://www.indesignjs.de/extendscriptAPI/indesign13/#Link.html#d1e293585__d1e294323
The interesting thing with this method:
It does not require an existing file object for relinking, a new linkResourceURI:String is required instead.
That means that we can relink to not yet existing files or to files we have no access to and just know where they should be positioned on a client's file system. That could simplify things…
See Mark's correct answer in:
Relink an image to a file that does not exist
dona56558947, 3 hours ago
https://community.adobe.com/t5/indesign-discussions/relink-an-image-to-a-file-that-does-not-exist/td...
See m1b's (Mark's) code in the same thread:
Regards,
Uwe Laubender
( ACP )
Copy link to clipboard
Copied
Thank you for pointing this out, Uwe!
— Kasyan
Copy link to clipboard
Copied
Hi Kasyan, will this script work when using Indesign Server 2022? We have an issue trying to get links to uodate that are stored in the same folder as the layout. We can print the cntent of the layout to PDF but the image links are broken and need to be relinked
Regards
Charles
Copy link to clipboard
Copied
Hi Charles,
No, IDS has neither dialog boxes nor selections.
Copy link to clipboard
Copied
Why don't you want to use the Relink to Folder feature?
Copy link to clipboard
Copied
Why nothing is selected is showing while I have selected one image there?
Copy link to clipboard
Copied
Hi abdullah,
as far as I can see from your screenshot you run the script in PhotoShop.
Kasyan's script is for InDesign documents.
Best,
Uwe Laubender
( ACP )