[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: 12885

19. Dez 2006, 15:06
Beitrag # 1 von 13
Bewertung:
(16882 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
  1. 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
  1. 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: 5826

19. Dez 2006, 17:29
Beitrag # 2 von 13
Beitrag ID: #267648
Bewertung:
(16854 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
  1. // 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: 12885

19. Dez 2006, 17:53
Beitrag # 3 von 13
Beitrag ID: #267653
Bewertung:
(16848 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:
(16823 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: 12885

20. Dez 2006, 09:03
Beitrag # 5 von 13
Beitrag ID: #267713
Bewertung:
(16820 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
  1. 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: 5826

20. Dez 2006, 11:52
Beitrag # 6 von 13
Beitrag ID: #267755
Bewertung:
(16799 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: 12885

20. Dez 2006, 12:49
Beitrag # 7 von 13
Beitrag ID: #267770
Bewertung:
(16791 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: 12885

22. Dez 2006, 10:14
Beitrag # 8 von 13
Beitrag ID: #268067
Bewertung:
(16748 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
  1. 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: 5826

22. Dez 2006, 11:54
Beitrag # 9 von 13
Beitrag ID: #268089
Bewertung:
(16731 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
  1. 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: 12885

22. Dez 2006, 12:40
Beitrag # 10 von 13
Beitrag ID: #268097
Bewertung:
(16721 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
  1. 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: 5826

22. Dez 2006, 15:23
Beitrag # 11 von 13
Beitrag ID: #268116
Bewertung:
(16689 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
  1. 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: 12885

22. Dez 2006, 16:00
Beitrag # 12 von 13
Beitrag ID: #268124
Bewertung:
(16683 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: 5826

22. Dez 2006, 16:27
Beitrag # 13 von 13
Beitrag ID: #268130
Bewertung:
(16679 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