[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt rename() und relink() bei mehrfach platzierten Dateien

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

rename() und relink() bei mehrfach platzierten Dateien

JeT
Beiträge gesamt: 40

20. Apr 2017, 02:09
Beitrag # 1 von 6
Bewertung:
(4391 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich habe gerade Stunden mit Fehlersuche verbracht und bin nun mit meinem Halbwissen am Ende, nachdem ich alles runtergebrochen habe, den ganzen Schnick-Schnack entfernt und festgestellt habe, dass schon das Elementarste meines Skriptes nicht funktioniert:

Ich möchte eine ausgewählte Verknüpfung umbenennen und dann natürlich neu verknüpfen, hier ein kleines Snippet:
Code
var cLink = app.selection[0].graphics.item(0).itemLink; 
var newFile = File(cLink.filePath);
var newFileName = "test2.png";

newFile.rename(newFileName);

try {
cLink.relink(newFile);
} catch (e) { alert(e); }


Funktioniert alles wunderbar – solange, wie die Verknüpfung nur einmal im Dokument auftaucht.

Ist die Datei mehrfach im Id-Dokument platziert, bekomme ich nach dem erfolgreichen rename einen Fehler, dass die Datei nicht existiert (tut sie) verwendet wird oder falsche Zugriffsrechte hat.


Jemand eine Idee, wo mein Fehler ist?

Dankeschöön
X

rename() und relink() bei mehrfach platzierten Dateien

Hans Haesler
  
Beiträge gesamt: 5826

20. Apr 2017, 09:15
Beitrag # 2 von 6
Beitrag ID: #557112
Bewertung:
(4337 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

ja, wenn die Bilddatei umbenannt ist, dann ist bei den weiteren Vorkommen der Status "Fehlend".

Versuche es bitte mal damit:

Code
var allPaths = app.documents[0].links.everyItem().filePath; 
var allLinks = app.documents[0].links;

var onePath = app.selection[0].graphics.item(0).itemLink.filePath;
var cLink = app.selection[0].graphics.item(0).itemLink;

var newFile = File(cLink.filePath);
var newFileName = "test2.png";
newFile.rename(newFileName);

for (var n=0; n<allPaths.length; n++) {
if (allPaths[n] == onePath) {
try {
allLinks[n].relink(newFile);
}
catch (e) {
alert(e);
}
}
}

Ohne Erklärung, was genau geschieht. Das findest Du schon heraus. :-)

Gruss, Hans


als Antwort auf: [#557110]

rename() und relink() bei mehrfach platzierten Dateien

JeT
Beiträge gesamt: 40

20. Apr 2017, 19:09
Beitrag # 3 von 6
Beitrag ID: #557132
Bewertung:
(4261 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Hans,

das funktioniert, danke dir.

Ich dachte mir ursprünglich allerdings, dass wirklich nur die ausgewählte Verknüpfung geändert wird, unabhängig von den anderen. Die sollen dann ruhig fehlend sein. Geht das auch?
Ob das letztendlich Sinn macht bin ich mir nicht sicher, aber ich würds gerne mal wissen :)


als Antwort auf: [#557112]

rename() und relink() bei mehrfach platzierten Dateien

Hans Haesler
  
Beiträge gesamt: 5826

20. Apr 2017, 19:23
Beitrag # 4 von 6
Beitrag ID: #557133
Bewertung:
(4254 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

nur das ausgewählte Bild umbenennen und neu verlinken lassen geht natürlich auch: Wenn ich Dein Script einmal ausführe, dann wird das Bild im gewählten Rahmen umbenannt und neu verlinkt.

Aber es gibt keine Fehlermeldung.

Doch der von Dir gepostete Text kommt, wenn ich das Script ein zweites Mal ausführe und dabei ein anderes gleiches Bild ausgewählt habe.

Deshalb meine Lösung, welche alle Bilder mit dem selben Namen wie das ausgewählte neu verlinkt. Etwas anderes ist unbrauchbar.

Aber was für Dich Sinn macht, musst Du selber bestimmen.

Gruss, Hans


als Antwort auf: [#557132]

rename() und relink() bei mehrfach platzierten Dateien

JeT
Beiträge gesamt: 40

20. Apr 2017, 19:29
Beitrag # 5 von 6
Beitrag ID: #557134
Bewertung:
(4250 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Doch der von Dir gepostete Text kommt, wenn ich das Script ein zweites Mal ausführe und dabei ein anderes gleiches Bild ausgewählt habe.


Stimmt... und ich habe meinen Dialog noch dahin getrimmt, dass ein Umbenennen bei fehlender Verknüpfung ausgegraut wird... ich habe gerade keine Ahnung mehr, was ich ursprünglich genau erreichen wollte... war wohl bisschen spät gestern :)


Danke dir Hans! Dein Weg ist der einzig sinnvolle.


als Antwort auf: [#557133]

rename() und relink() bei mehrfach platzierten Dateien

Stephan_M
Beiträge gesamt: 480

28. Apr 2017, 18:06
Beitrag # 6 von 6
Beitrag ID: #557254
Bewertung:
(3692 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

falls andere das Thema aufsuchen, unten im Quelltext noch "LinksRename", ein feines altes Skript zum "Datei umbenennen" von Olaf Kvern, 2005! Es läuft immer noch in CS6. Ob es in CC läuft, weiß ich nicht. (http://avondale.typepad.com/...renamerelink_sc.html)

Und noch eins, sehr ähnlich: "Rename Placed Link" von Marijan Tompa (tomaxxi) / Subotica (http://indisnip.wordpress.com). Das tolle an Marijans Skript ist: Es schlägt vor Bilder auch zu re-linken statt zu renamen, wenn der Bildname in den der Link geändert werden soll schon im Verzeichnis vorhanden ist. Im Vergleich dazu bricht Olav Kverns Skript ab. Ich traue mich nicht es zu posten, denn ich habe nur eine binary Version. Und man braucht es ja eigentlich nicht mehr, da Neu-verknüpfen schon lange in Indesigns Bordmitteln zur Verfügung steht. Ich kann es aber sicher bei Bedarf vermailen.

Code
//RenameRelink.jsx 
//Olav Kvern
//An InDesign CS2 JavaScript
//
//Renames the file of the selected linked graphic and relinks to the renamed graphic.
//Used in the production of "Real World Adobe InDesign CS2"
//

var myDoc = app.activeDocument;
var myMultipleLinks = new Array();

if(app.documents.length != 0){
if((app.documents.item(0).allGraphics.length != 0)&&(app.selection.length != 0)){
//A production version of this script would probably include
//a more complete list of graphic/page item types.
switch(app.selection[0].constructor.name){
//If a frame is selected with the Selection tool...
case "Rectangle":
case "Oval":
case "Polygon":
if(app.selection[0].graphics.length != 0) {
var selImage = app.selection[0].graphics.item(0);
}
break;
//If a graphic is selected with the Direct Selection tool...
case "Image":
case "EPS":
case "PDF":
var selImage = app.selection[0];
break;
}
if (selImage != undefined) {
switch (selImage.itemLink.status) {
case LinkStatus.linkMissing :
alert("Can't rename missing link.");
break;
case LinkStatus.LINK_EMBEDDED :
alert("Can't rename embedded link.");
break;
default: myDisplayDialog(selImage);
}
}
}
}

function myDisplayDialog(myGraphic){
var myLink = myGraphic.itemLink;
var myLinkName = myLink.name;

var myDialog = app.dialogs.add({name:"Rename placed file"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"File name:"});
}
with(dialogColumns.add()){
var myFileNameField = textEditboxes.add({editContents:myLinkName, minWidth:200});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var myFileName = myFileNameField.editContents;
myDialog.destroy();
myRenameGraphic(myLink, myFileName);
}
else{
myDialog.destroy();
}
}

// Relink the links placed more than once
function myRenameGraphic(myLink, myNewLinkName) {
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]);
}
}

if (myNewLinkName != myLink.name) { // (myNewLinkName + myExtension != myLink.name)
var myOldImageHDfile = new File( myLink.filePath );
var myOldLinkNameStr = String(myLink.name);
var myRenameResult = myOldImageHDfile.rename(myNewLinkName); //( myNewLinkName + myExtension )
if (myRenameResult) {
myLink.relink(myOldImageHDfile);

for (var f = myMultiUsedLink.length-1; f >= 0 ; f--) {
var myCurrLink = myMultiUsedLink[f];
if (myNewLinkName != myCurrLink.name) { //(myNewLinkName + myExtension != myCurrLink.name)
myCurrLink.relink(myOldImageHDfile);
}
}
}
else {
if (new File(myOldImageHDfile.parent + "/" + myNewLinkName).exists) { //(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension)
alert("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + " because the file already exists\n");
//("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + myExtension + " because the file already exists\n")
}
else {
alert("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");
}
}
}
// UpdateAllOutdatedLinks();
}



als Antwort auf: [#557134]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!