[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

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

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

19. Dez 2006, 15:06
Beitrag # 1 von 13
Bewertung:
(15924 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald und Hans und andere Skripter.

ich hänge gerade an einem Exportproblem.

Per Skript sollen die Namen der verknüpften Bilder in eine Textdatei exportiert werden.
In meinen bisherigen Versuchen entstehen dabei Probleme, sobald Umlaute in den Dateinamen der Bilder enthalten sind (in meinem Skript sollen gerade u.a. Umlaute eliminiert bzw. durch andere Zeichen ersetzt werden).

Im Skript unten habe ich zwei Wege (Funktionen) zum Export der Bildnamen dargestellt:
1. Direktexport über File.open() - exportTXT()
2. Export über temporären Textrahmen - exportTempFrameAsTXT()

Gehe ich den ersten Weg über den Direktexport, löscht mir ein Umlaut in den zu exportierenden Daten den gesamten Inhalt. Die exportierte Textdatei ist leer.

Gehe ich den zweiten Weg über die Erstellung eines temporären Textrahmens und dem Export dessen Textflusses, werden die Umlaute falsch ausgegeben. Z.B. "o" statt "ö".

Es kommt mir vor, als würde beim Auslesen der Dateinamen per Skript ein "ö" als eine "o.."-Zeichenkombination umgesetzt (also ein o kombiniert mit einem Zeichen "..".
Bei Weg 1 führt das Zeichen ".." zum Verlust der zu exportierenden Daten und bei Weg 2 wird dieses Zeichen ignoriert. Wie bekomme ich ein "ö" als "ö" aus den Namen der verknüpften Bilder?

In folgendem Skript können die beiden Exportmethoden getestet werden.

Code
var myLinkNames = app.documents[0].links.everyItem().name; // die Namen aller verknüpften Bilddateien 
var myContent = myLinkNames.join("\r");
var myFolderName = "~/Desktop/";

exportTXT(myContent, "Bilder_1.txt"); // Direktexport
exportTempFrameAsTXT(myContent, "Bilder_2.txt"); // Export über temporären Textrahmen

// Direktexport
function exportTXT(myData, myFileName){
myCreator = "R*ch";
myType = "UTF-8";
myPath = myFolderName + myFileName;
myFile = new File( myPath);
myFile.open( 'w', myType, myCreator );
myFile.write( myData );
myFile.close();
}

// Export über temporären Textrahmen
function exportTempFrameAsTXT(myData, myFileName) {
var myFrame = app.documents[0].textFrames.add();
myFrame.geometricBounds = [0,-100, 150,0];
myFrame.contents = myData;
var myFile = File(myFolderName + myFileName);
myFrame.parentStory.exportFile(ExportFormat.textType, myFile);
myFrame.remove();
}



Habe dasselbe über AppleScript versucht.
Da kommen die Umlaute richtig an:

Code
tell application "Adobe InDesign CS2" 
set myFolderName to path to desktop as Unicode text
set myTXT_File to "Bilder_3.txt"
set myLinks to name of links of active document
set oldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to {return}
set myData to myLinks as text
set AppleScript's text item delimiters to oldDelims
set myFile to (open for access file (myFolderName & myTXT_File) with write permission)
set eof myFile to 0
write myData to myFile
close access myFile
end tell


Kann mir jemand einen Hinweis geben, wie ich die Umlaute per JavaScript korrekt exportieren kann?

============
OS X 10.4.8
InDesign CS2 (4.04)

(Dieser Beitrag wurde von Martin Fischer am 19. Dez 2006, 15:18 geändert)
X

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Hans Haesler
Beiträge gesamt: 5822

19. Dez 2006, 17:29
Beitrag # 2 von 13
Beitrag ID: #267648
Bewertung:
(15896 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich kann Deine Ergebnisse bestätigen. Und ich habe auch schon
bei einem ähnlichen Problem viel Zeit investiert, ohne eine Lösung
gefunden zu haben.

Hier ein Ansatz, wie "wenigstens" beim direkten Export der Text
nicht verlorengeht. Allerdings auch ohne Umlaute.

Code
// Direktexport  
function exportTXT(myData, myFileName){
myPath = myFolderName + myFileName;
var f = new File(myPath);
var fileIsOpen = f.open("w");
if (fileIsOpen) {
f.encoding = "ISO-10646-UCS-2LE"
f.write(myData);
f.close();
}
}

Im Kapitel "3 Using File and Folder Objects" der Scripting-Referenz findest
Du unter "File and folder supported encoding names" vielleicht einen
Encoding-Namen, welcher besser funktioniert (ich habe nicht alle ausprobiert).

Gruss, Hans


als Antwort auf: [#267611]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

19. Dez 2006, 17:53
Beitrag # 3 von 13
Beitrag ID: #267653
Bewertung:
(15890 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke für Deine Bestätigung und den Hinweis mit dem Encoding.

Im Skripting-Forum ist mir mittlerweile bestätigt worden (und ein kleines AppleScript hat dies offen zu Tage gefördert), daß Unicode-Zeichen manchmal durch zwei Zeichen repräsentiert werden. So ist das "ö" manchmal ein "o" kombiniert mit dem diakritischen Unicode-Zeichen \u0308 (combining diaresis).

Peter Kahrel hat mir einen Hinweis gegeben, wie ich das \u0308 per RegExp aus einer Zeichenkette rauslösche. Ich werde das konstruktiv dahingehend ausbauen, aus den zwei Zeichen wieder eines, nämlich das gewünschte und benötigte "ö" hinzubasteln.

Wer oder was zerlegt mir beim Weg vom Finder (Dateinamen der Bilddatei) über InDesign ins Skript ein einzelnes Zeichen in eine Kombination? Und wie ist dieser Zerlegung vorzubeugen?

Warum passiert das nur in JavaScript und nicht auch in AppleScript?

Warum wird das Skripten von einem Tag auf den anderen auf einmal so mühsam? ;-)


als Antwort auf: [#267648]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Jürgen Althaus
Beiträge gesamt: 102

20. Dez 2006, 08:25
Beitrag # 4 von 13
Beitrag ID: #267708
Bewertung:
(15865 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich habe von Scripten nicht viel Ahnung und weiß nicht ob dir diese Info weiterhilft! Habe dein Script auf einer WindowsXP-Maschine probiert. Erstaunlicherweise werden hier die Umlaute der verknüpften Dateien ohne Probleme exportiert. Es scheint möglicherweise auch am Betriebssystem zu liegen?

Viele Grüße

Jürgen


als Antwort auf: [#267653]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

20. Dez 2006, 09:03
Beitrag # 5 von 13
Beitrag ID: #267713
Bewertung:
(15862 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

> Erstaunlicherweise werden hier die Umlaute der verknüpften Dateien ohne Probleme exportiert

Gut beobachtet.

Für den Mac habe ich nun eine cleanupUmlaut()-Funktion ergänzt, die aus den zwei Zeichen, die zusammen einen Umlaut darstellen, einen einzeichigen Umlaut machen.
Code
var myLinkNames = app.documents[0].links.everyItem().name; // die Namen aller verknüpften Bilddateien 
var myContent = myLinkNames.join("\r");
if ($.os.search(/windows/i) == -1) // Betriebssystem
var myContent = cleanupUmlaut(myContent);
var myFolderName = "~/Desktop/";

exportTXT(myContent, "Bilder_1.txt"); // Direktexport
exportTempFrameAsTXT(myContent, "Bilder_2.txt"); // Export über temporären Textrahmen

// Direktexport
function exportTXT(myData, myFileName){
myCreator = "R*ch";
myType = "UTF-8";
myPath = myFolderName + myFileName;
myFile = new File( myPath);
myFile.open( 'w', myType, myCreator );
myFile.write( myData );
myFile.close();
}

// Export über temporären Textrahmen
function exportTempFrameAsTXT(myData, myFileName) {
var myFrame = app.documents[0].textFrames.add();
myFrame.geometricBounds = [0,-100, 150,0];
myFrame.contents = myData;
var myFile = File(myFolderName + myFileName);
myFrame.parentStory.exportFile(ExportFormat.textType, myFile);
myFrame.remove();
}

function cleanupUmlaut (theString) {
return theString.replace( /a\u0308/g, 'ä').replace( /o\u0308/g, 'ö').replace( /u\u0308/g, 'ü').replace( /A\u0308/g, 'Ä').replace( /O\u0308/g, 'Ö').replace( /U\u0308/g, 'Ü')
}



als Antwort auf: [#267708]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Hans Haesler
Beiträge gesamt: 5822

20. Dez 2006, 11:52
Beitrag # 6 von 13
Beitrag ID: #267755
Bewertung:
(15841 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

hast Du es gut! ;-)

Hier müsste ich auch die Zeichen à â ç é è ê ë î ï ô ù û
und À Â Ç É È Ê Ë Î Ï Ô Ù Û behandeln ...

Gruss, Hans


als Antwort auf: [#267713]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

20. Dez 2006, 12:49
Beitrag # 7 von 13
Beitrag ID: #267770
Bewertung:
(15833 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hans,

> hast Du es gut! ;-)

Ich stehe erst am Anfang und habe mich zunächst auf die Umlaute konzentriert, weil mit denen am ehesten zu rechnen ist.

Das fertige Skript soll übrigens gerade dafür sorgen, daß die Sonderzeichen aus den Dateinamen von Verknüpfungen eliminiert werden. ;-)
Aber dazu müssen sie erst mal zum Greifen sein.

> Hier müsste ich auch die Zeichen à â ç é è ê ë î ï ô ù û
> und À Â Ç É È Ê Ë Î Ï Ô Ù Û behandeln ...

Danke für die Auflistung.
Diese Zeichen werde ich auch noch aufnehmen.
Bei fremden Daten muß man mit allem rechnen.
Ich selber hüte mich davor, Sonderzeichen in Dateinamen zu verwenden, ertappe mich jedoch hin und wieder beim Gebrauch von Leerstellen.


als Antwort auf: [#267755]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

22. Dez 2006, 10:14
Beitrag # 8 von 13
Beitrag ID: #268067
Bewertung:
(15790 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

hast Du Lust auf eine kleine Überraschung?
Dann erstelle ein neues Dokument, platziere irgend ein Bild und führe das unten stehende Skript aus. Bitte beachte: während der Ausführung wird die Bilddatei umbenannt.

Code
var newName = "äöüÄÖÜ.eps"; 
var myLink = app.documents[0].links[0];

var myNewFilePath = myLink.filePath.split(":"); // Pfad zur Bilddatei als Array
myNewFilePath.pop(); // alten Dateinamen aus dem Pfad entfernen
myNewFilePath.push(newName); // neuen Dateinamen hinzufügen
myNewFilePath = myNewFilePath.join(":"); // Pfad aus Array wiederherstellen

File(myLink.filePath).rename(newName); // Datei umbenennen
myLink.relink(File(myNewFilePath)); // Link mit der umbenannten Datei verknüpfen
myLink.update(); // Verknüpfung aktualisieren


Die Überraschung?
Wirf mal einen Blick auf den Bilddateinamen.


als Antwort auf: [#267755]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Hans Haesler
Beiträge gesamt: 5822

22. Dez 2006, 11:54
Beitrag # 9 von 13
Beitrag ID: #268089
Bewertung:
(15773 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

na ... richtig überrascht bin ich nicht. Wende ich doch
diese Befehle auch an. Nur nicht in dieser Abfolge.

Ich nehme an, Du wirst diesen Code an das Ersetzen der Umlaute
anschliessen.

Hier eine Idee, wie man das Ersetzen vereinfachen könnte:

Code
var goodChars = "abcdefghjiklmnopqrsßtuvwz._-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
var myLink = app.documents[0].links[0];
var oldName = myLink.name;
var newName = "";
for (var k=0; k<oldName.length; k++) {
if (goodChars.match(oldName[k])) {
newName = newName + oldName[k];
}
}
if (newName != oldName) {
// Code zum Umbenennen
}

Die 'goodChars' können natürlich noch ergänzt werden.
Und vor jedem Umbenennen einer Datei muss das Script prüfen,
ob nicht schon eine gleichnamige existiert.

Gruss, Hans


als Antwort auf: [#268067]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

22. Dez 2006, 12:40
Beitrag # 10 von 13
Beitrag ID: #268097
Bewertung:
(15763 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich bin mir nicht sicher, ob Du mich richtig verstanden hast.

Es ging mir in der Studie nicht darum zu zeigen, wie man Umlaute durch gute Zeichen ersetzt (in dem "Hauptscript" geht es darum, verknüpfte Dateien anhand einer externen Tabelle mit alten und den dazugehörigen neuen Namen umzubenenen und neu zu verknüpfen; die neuen Namen werden vom Anwender vergeben; was weiß ich, was der Anwender hinterher für Zeichen für die neuen Namen verwendet und wenn er einen Umlaut verwenden will, habe ich ihm nicht auf den Finger zu klopfen).

Es ging mir vielmehr darum zu zeigen, daß dies auf dem Mac mit JavaScript aus InDesign nicht zuverlässig geht.

Der vorgegebene neue Dateiname war "äöüÄÖÜ.eps".
Tatsächlich heißt die Datei - ohne irgendwelche Manipulationen der Zeichen des neuen Namens - hinterher "äöüAOÜ.eps". Die zwei Punkte über Ä und Ö verschwinden bei der Zuweisung des neuen Namens im Nirgendwo - und das nur, wenn großgeschriebene Umlaute in Serie (mindestens 2) hintereinander auftauchen.

Unter Windows habe ich es noch nicht getestet.
Ich vermute, daß es dort korrekt ausgeführt wird.

Mit AppleScript funktioniert das richtig.

Code
set newName to "äöüÄÖÜ.eps" 
tell application "Adobe InDesign CS2"
set myDoc to active document
tell myDoc
set myLink to item 1 of links
set oldName to name of myLink
set oldPath to file path of myLink
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set myList to every text item of oldPath
set item -1 of myList to newName
set newPath to myList as string
set AppleScript's text item delimiters to oldDelimiters
my renameLink(newName, oldPath)
relink myLink to newPath
update myLink
end tell
end tell


on renameLink(aName, aPath)
tell application "Finder"
set name of file aPath to aName
end tell
end renameLink



als Antwort auf: [#268089]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Hans Haesler
Beiträge gesamt: 5822

22. Dez 2006, 15:23
Beitrag # 11 von 13
Beitrag ID: #268116
Bewertung:
(15731 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich habe Dich nicht richtig verstehen können, weil hier
(mit Mac OS X 10.4.4, Landeseinstellungs-Sprache "Deutsch")
alle sechs Diäresis-Zeichen sichtbar sind: "äöüÄÖÜ.eps".
Sowohl im Finder als auch in der InDesign-Links-Palette.

Aber vielleicht kann jemand anderer Deine Überraschung
nachvollziehen. Denn vielleicht hat meine französische
InDesign-Version einen EInfluss.

Das AppleScript kann etwas vereinfacht werden:

Code
set newName to "äöüÄÖÜ.eps" 
tell document 1 of application "Adobe InDesign CS2"
set myLink to item 1 of links
set oldPath to file path of myLink
set newPath to (my renameLink(newName, oldPath)) as string
relink myLink to newPath
update myLink
end tell

on renameLink(aName, aPath)
tell application "Finder"
set filePath to aPath as alias
set name of file aPath to aName
end tell
return filePath
end renameLink

Gruss, Hans


als Antwort auf: [#268097]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Martin Fischer
  
Beiträge gesamt: 12714

22. Dez 2006, 16:00
Beitrag # 12 von 13
Beitrag ID: #268124
Bewertung:
(15725 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

auf Deinen Hinweis hin werde ich heute später mal die Preferences von InDesign löschen.
Möglicherweise stinkt hier etwas. Bei anderer Gelegenheit konnte ich mir damit auch schon behelfen.

Und Dank für die Vereinfachung des AppleScripts (ich hatte schon halb drauf gehofft).
Da bin ich ja ganz schön um die Ecken gefahren. Wenn das nur mal kein Schandfleck wird. ;-)


als Antwort auf: [#268116]

Skript-Export der Dateinamen von verknüpften Bildern mit Umlauten

Hans Haesler
Beiträge gesamt: 5822

22. Dez 2006, 16:27
Beitrag # 13 von 13
Beitrag ID: #268130
Bewertung:
(15721 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

keine Sorge. :-) Du bist den logischen Weg gegangen.

Meine Abkürzung beruht darauf, dass der Finder den Namen
einer Datei aufgrund eines kompletten Pfades ändern kann.
Und wenn man vorher ein Alias speichert, dann wird damit
später auch die "neue" Datei gefunden.

Gruss, Hans


als Antwort auf: [#268124]
X