doesn't create hyperlinks for my images
I have made the following script - can anyone see what's wrong? seems like it doesn't want work after I data merge.
it doesn't seem to be able to attach url to the image
// ---- 1. Language selection dialog ----
var languageCodes = ["da", "en", "se"];
var languages = ["Dansk", "English", "Swedish"];
var w = new Window("dialog", "Vælg sprog til links");
w.orientation = "column";
w.alignChildren = "left";
w.add("statictext", undefined, "Vælg sprog til hyperlinks:");
var dropdown = w.add("dropdownlist", undefined, languages);
dropdown.selection = 0;
w.add("button", undefined, "OK");
w.add("button", undefined, "Annuller");
if (w.show() !== 1) exit();
var langIndex = dropdown.selection.index;
var langCode = languageCodes[langIndex];
// ---- 2. Vælg tekstfil ----
var txtFile = File.openDialog("Vælg rapport tekstfil med billednavne (*.txt)", "*.txt", false);
if (!txtFile || !txtFile.exists) {
alert("Ingen fil valgt eller filen findes ikke.");
exit();
}
txtFile.open("r");
var fileContents = txtFile.read();
txtFile.close();
// ---- 3. Byg mapping på baggrund af basenavnet fra rapporten ----
var billedLinkData = {};
var regex = /([^\\\/]+\.jpg)/gi; // Matcher kun .jpg-filer, ikke hele stien
var match;
while ((match = regex.exec(fileContents)) !== null) {
// Brug kun filnavn, lowercase og trim
var filnavn = match[1].toLowerCase().trim();
var itemnummer = filnavn.replace(/\.jpg$/i, "");
billedLinkData[filnavn] = "https://test.com/" + langCode + "/" + itemnummer;
}
// ---- 4. DIAGNOSTICS: Find alle billeder der matcher rapporten, og vis resultat ----
var doc = app.activeDocument;
var totalImageFrames = 0;
var matchedImageFrames = 0;
var matchList = [];
var notMatchedList = [];
for (var p = 0; p < doc.pages.length; p++) {
var page = doc.pages[p];
for (var i = 0; i < page.allPageItems.length; i++) {
var item = page.allPageItems[i];
if (item.constructor.name === "Rectangle" && item.images.length > 0) {
totalImageFrames++;
var imgName = item.images[0].itemLink.name.toLowerCase().trim();
if (billedLinkData.hasOwnProperty(imgName)) {
matchedImageFrames++;
matchList.push(imgName);
} else {
notMatchedList.push(imgName);
}
}
}
}
// Show diagnostic info to the user before running overlays:
alert(
"Diagnostik før processeringen:\n\n" +
"Der er " + totalImageFrames + " billedrammer med billeder i dokumentet.\n" +
matchedImageFrames + " af dem matcher rapporten og vil få overlay og hyperlink.\n" +
(matchedImageFrames > 0
? ("\nFørste 10 matchede:\n" + matchList.slice(0, 10).join("\n")) : "") +
(notMatchedList.length > 0
? ("\n\nBilleder i dokumentet IKKE i rapporten (første 10):\n" +
notMatchedList.slice(0,10).join("\n"))
: "")
);
// ---- 5. Foretag overlay og hyperlink kun på matchende billeder ----
var added = 0;
var attachedLinks = [];
for (var p = 0; p < doc.pages.length; p++) {
var page = doc.pages[p];
for (var i = 0; i < page.allPageItems.length; i++) {
var item = page.allPageItems[i];
if (item.constructor.name === "Rectangle" && item.images.length > 0) {
try {
var img = item.images[0];
var imgPath = img.itemLink.name.toLowerCase().trim();
if (billedLinkData.hasOwnProperty(imgPath)) {
var url = billedLinkData[imgPath];
// Tilføj overlay på billedrammen
var overlay = page.rectangles.add({
geometricBounds: item.geometricBounds,
fillColor: doc.swatches.itemByName("None"),
strokeColor: doc.swatches.itemByName("None"),
layer: item.itemLayer
});
overlay.sendToBack();
overlay.transparencySettings.blendingSettings.opacity = 0;
// Opret hyperlink-destination (hvis ikke allerede findes)
var dest;
try {
dest = doc.hyperlinkURLDestinations.itemByName(url);
if (!dest.isValid) throw "invalid";
} catch (_) {
dest = doc.hyperlinkURLDestinations.add(url, {name: url});
}
var source = doc.hyperlinkPageItemSources.add(overlay, {hidden: false});
doc.hyperlinks.add(source, dest);
added++;
attachedLinks.push(imgPath + " -> " + url);
}
} catch (e) {
$.writeln("Fejl: " + e.message);
}
}
}
}
if (attachedLinks.length > 0) {
alert(
attachedLinks.length + " hyperlinks blev tilføjet til billeder:\n\n" +
attachedLinks.join("\n")
);
} else {
alert("Ingen hyperlinks blev tilføjet.");
}
