Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » [JavaScript] PDFs verschieben ...

[JavaScript] PDFs verschieben ...

vhausw
Beiträge gesamt: 65

19. Nov 2009, 08:33
Bewertung:

gelesen: 18847

Beitrag als Lesezeichen
Hallo ihr JavaScript Meister.
Gibt es eine Möglichkeit per JavaScript ein PDF von einem Ordner in einen anderen zu verschieben.
Das ist aber noch nicht alles.

Also:
In meinem aktiven (geöffneten) InDesign CS4 Dokument sind einige PDF-Daten verknüpft.
Diese liegen in einem Odrner (auch mit Unterordner).
Ich sollte nun alle PDF-Daten (die sich in dem ID-Doc befinden) aus dem Original Ordner in einen anderen Ordner verschieben können.
Der Original Ordner liegt auf C://. Der Neue Ordner liegt auf D://.

Geht das überhaupt mit einem JavaScript aus ID heraus?
Danke für Eure Hilfe.

PC: XP Prof, ID CS4 (6.0.4)

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 09:07
Bewertung:

gelesen: 18824

Beitrag als Lesezeichen
Hallo vhausw,

dies ist kein Problem.
Du kannst über alle Verknüpfungen im Dokument laufen, dir deine PDF-Verknüpfungen raussuchen, die dazugehörige Datei auslesen, mit File.copy() und File.remove() die Datei an einen anderen Ort kopieren und anschließend deine Verknüpfung aktualisieren.

Gruss

Flo

[JavaScript] PDFs verschieben ...

vhausw
Beiträge gesamt: 65

19. Nov 2009, 09:32
Bewertung:

gelesen: 18811

Beitrag als Lesezeichen
Hallo flobuc,

vielen Dank für die Info, dass dieses überhaupt Möglich sei.
Nur wie genau ich nun das Script machen sollte (??!!!!??)
- ich bin nun mal kein PROFI - ......
Wie gesagt, erstmals vielen Dank.

Grüße Volker

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 10:50
Bewertung:

gelesen: 18775

Beitrag als Lesezeichen
Hallo Volker,

hier ist ein ungetester Entwurf wie das Ganze aussehen könnte:
Code
/aktuelles Dokument 
var currentDocument=app.activeDocument;

//Neuen Abbildungsordner erzeugen
var newFolder = new Folder("~/Hier dein Pfad");
if(!newFolder.exists){
newFolder.create();
}

for(j=0;j < currentDocument.allGraphics.length; j++){ // durchlaufe alle Bilder im Dokument
var currentGraphic = currentPage.allGraphics[j];
var aLink = currentGraphic.itemLink;

if(aLink.status==LinkStatus.NORMAL){ //Verknüpfung stimmt
if(aLink.linkType=="Adobe Portable Document Format (PDF)"){
var f = new File(aLink.filePath);
f.copy(newFolder+"/"+f.name);
aLink.relink(new File(newFolder+"/"+f.name));
aLink.update();
f.remove();
}
}
}


Probiers mal aus.

Gruss

Flo

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2009, 11:15
Bewertung:

gelesen: 18762

Beitrag als Lesezeichen
Hallo Florian,

entschuldige, wenn ich mich kurz einmische.

Du sammelst die Links über allGraphics.
Das ginge direkter über var myLinks = app.documents.firstItem().links.

Ich erwähne dies, weil ich befürchte (ohne es geprüft zu haben), dass die Zeile var aLink = currentGraphic.itemLink einen Fehler ausspucken könnte, wenn eine Graphik keine Verknüpfung hat, weil sie aus der Zwischenablage platziert wurde.

Wenn Du gerade ein Dokument zum Testen eingerichtet hast, könntest Du das mal überprüfen.

Ansonsten gefällt mir das Skript und ich würde es gerne ins Skriptarchiv aufnehmen.
Hast Du noch einen passenden Namen?

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 19. Nov 2009, 11:16 geändert)

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 12:13
Bewertung:

gelesen: 18730

Beitrag als Lesezeichen
Hallo Martin,

du hast recht, currentGraphic.itemLink liefert bei einer Graphik ohne Verknüpfung "null" zurück und das Script läuft dann in einen Fehler.
Zu meiner Entschuldigung kann ich sagen, daß bei uns solche Bilder nicht vorkommen, da alle Bilder als verknüpfte Bilder von den Bildbearbeitern zugeliefert werden ;-)

Namen hab ich keinen, daß Skript hab ich mir gerade so zusammen gebaut. Wenn mann die Abfrage auf PDF weglässt, kann man damit alle Verknüpfungen in einen neuen Ordner verschieben und neu verknüpfen, also irgendwie "MoveLinksAndRelink". Aber wenn dir ein besserer Name einfällt immerzu.

Gruss

Flo

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2009, 12:42
Bewertung:

gelesen: 18715

Beitrag als Lesezeichen
Hallo Florian,

Du brauchst Dich nicht zu entschuldigen.

Antwort auf: du hast recht, currentGraphic.itemLink liefert bei einer Graphik ohne Verknüpfung "null" zurück und das Script läuft dann in einen Fehler.


Ich arbeite gerade an einem Skript, das bem Öffnen eines Dokuments Graphiken ohne Verknüpfung aufstöbert und listet. Deswegen bin ich im Moment dafür sensibilisiert. ;-)

Viele Grüße
Martin


[JavaScript] PDFs verschieben ...

vhausw
Beiträge gesamt: 65

19. Nov 2009, 12:48
Bewertung:

gelesen: 18707

Beitrag als Lesezeichen
Hallo Florian,
Hallo Martin.

Ich beiden seit wirklich super. Nochmals vielen Dank.

Nun komme ich mit einer weiteren kleinen Bitte an EUCH.
Alle meine Original PDF Daten liegen ja in einem Ordner [A] mit vielen Unterordnern .
Beispiel für einen Unterordner : PDF_K oder PDF_A .
In diesem Ordner liegen dann alle PDFs, die vom Namen her wie folgt aussehen:
PDF_K_001.pdf ; PDF_K_002.pdf ; PDF_K.pdf
Kann ich nun mit dem NEUEN Script "MoveLinksAndRelink" die Bilder
in dem "newFolder" kopieren (aber schon sortiert nach den Unterordnern )
und dann erst neu verknüpfen.

Also nochmals vielen Dank für EURE Hilfe.
Grüße aus Stuttgart. Volker

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 13:30
Bewertung:

gelesen: 18680

Beitrag als Lesezeichen
Hallo Volker,

hier ist nochmal eine getestete Version wobei die 1. Unterordner mit kopiert werden:

Code
//aktuelles Dokument 
var currentDocument=app.activeDocument;

//Neuer Basisordner erzeugen
var baseFolder = new Folder("/c/Hier_neuer_Basis_Pfad");
if(!baseFolder.exists){
baseFolder.create();
}

for(j=0;j < currentDocument.links.length; j++){ // durchlaufe alle Links im Dokument
var aLink = currentDocument.links[j];

if(aLink.status==LinkStatus.NORMAL){ //Verknüpfung stimmt
if(aLink.linkType=="Adobe Portable Document Format (PDF)"){
var f = new File(aLink.filePath);
//Unterordner erzeugen
var subfolderName = f.path.substring(f.path.lastIndexOf("/")+1,f.path.length);
(new Folder(baseFolder+"/"+subfolderName)).create();

var newFilename = baseFolder+"/"+ subfolderName +"/"+f.name;
f.copy(newFilename);
aLink.relink(new File(newFilename));
aLink.update();
f.remove();
}
}
}



Wenn du noch mehr Unterordner mitnehmen möchtest, musst du halt entsprechend die Zeile die den Subordner bestimmt ändern.

Gruss

Flo

(Dieser Beitrag wurde von flobuc am 19. Nov 2009, 13:35 geändert)

[JavaScript] PDFs verschieben ...

vhausw
Beiträge gesamt: 65

19. Nov 2009, 15:40
Bewertung:

gelesen: 18631

Beitrag als Lesezeichen
Hallo Florian,

echt genial, dein Script.
Leider kommt bei mir eine Fehlermeldung.
Fehlernummer: 30614
Zeile: 23
Quelle: aLink.update();

Aus diesem Grund kopiert er auch nur eine PDF-Datei in den Neuen Ordner.
Und zum Löschen kommt er folglich auch nicht.
Sorry.

Grüße aus Stuttgart.
Volker

(Dieser Beitrag wurde von vhausw am 19. Nov 2009, 15:41 geändert)

[JavaScript] PDFs verschieben ...

generalping
Beiträge gesamt: 419

19. Nov 2009, 15:54
Bewertung:

gelesen: 18617

Beitrag als Lesezeichen
Hallo,
ich bin auch ganz entzückt von diesem Script, könnte es ganz gut gebrauchen.

Leider habe ich keine Scriptkenntnisse und schon ein Problem mit der Anpassung.

Was muss ich denn bei new Folder("/c/Hier_neuer_Basis_Pfad");
eingeben?

OSX 10.5.8/CS4

Besten Dank für Tipps und Ratschläge

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 16:24
Bewertung:

gelesen: 18594

Beitrag als Lesezeichen
Hallo Volker,

da war ich wohl ein bischen zu schnell.

Ich hab die Anpassung von Martin vorgenommen und greife auf die Link-Objekte nicht mehr indirekt über Document.graphics zu, sondern direkt über das Document.links-Objekt. Dieses wird durch den Link.update()-Befehl beim for-Schleifendurchlauf aber geändert. So das hier eine saubere Inkonsistenz mit einem Dirty-Read entsteht.

Das nachfolgende Skript müsste passen:

Code
//aktuelles Dokument 
var currentDocument=app.activeDocument;

//Neuer Basisordner erzeugen
var baseFolder = new Folder("/c/Hier_neuer_Basis_Pfad");
if(!baseFolder.exists){
baseFolder.create();
}

for(j=0;j < currentDocument.links.length; j++){ // durchlaufe alle Links im Dokument
var aLink = currentDocument.links[j];

if(aLink.status==LinkStatus.NORMAL){ //Verknüpfung stimmt
if(aLink.linkType=="Adobe Portable Document Format (PDF)"){
var f = new File(aLink.filePath);
//Unterordner erzeugen
var subfolderName = f.path.substring(f.path.lastIndexOf("/")+1,f.path.length);
var subfolder = new Folder(baseFolder+"/"+subfolderName);
if(!subfolder.exists){
subfolder.create();
}

var newFilename = baseFolder+"/"+ subfolderName +"/"+f.name;
f.copy(newFilename);
aLink.relink(new File(newFilename));

f.remove();
}
}
}

currentDocument.links.everyItem().update();


Gruss

Flo

(Dieser Beitrag wurde von flobuc am 19. Nov 2009, 16:27 geändert)

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

19. Nov 2009, 16:31
Bewertung:

gelesen: 18587

Beitrag als Lesezeichen
Hallo ping,

hier sollte dein neuer Pfad stehen, in den du die PDFs kopiert haben willst:

Beispiel:
C:\Arbeit\Projekt_Peace\Kapitel_1\PDF

dann schreibst du folgendes zwischen die Anführungszeichen:

/c/Arbeit/Projekt_Peace/Kapitel_1/PDF


Gruss

Flo

[JavaScript] PDFs verschieben ...

kkauer
Beiträge gesamt: 661

19. Nov 2009, 19:35
Bewertung:

gelesen: 18531

Beitrag als Lesezeichen
Hallo vhausw,

nur interessehalber.
Antwort auf [ vhausw ] Nun komme ich mit einer weiteren kleinen Bitte an EUCH.

Das Beibehalten des Unterordners war dir von Anfang an "wichtig", es wurde nur nicht explizit in der Ausgangsfrage erwähnt? Ansonsten wäre ja gar kein Skript nötig.

(Dieser Beitrag wurde von kkauer am 19. Nov 2009, 19:36 geändert)

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

23. Nov 2009, 08:53
Bewertung:

gelesen: 18429

Beitrag als Lesezeichen
Hallo Florian,

mir ist Folgendes aufgefallen.
Wenn das Skript nach dem Verschieben der PDF und der Verknüpfung mit den verschobenen PDFs nochmals aufgerufen wird, dann werden die Originale per f.remove() gelöscht, nachdem sie auf sich selbst dupliziert worden sind.

Das ist gefährlich (wie schnell ist das Skript erneut ausgeführt, wenn es auf einer Taste liegt oder versehentlich ein neuer Doppelklick auf das Skript erfolgt) und sollte abgefangen werden.

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 23. Nov 2009, 08:54 geändert)

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

23. Nov 2009, 09:04
Bewertung:

gelesen: 9718

Beitrag als Lesezeichen
Hallo Martin,

das könnte passieren. Ich hab hier nochmal eine kleine Überprüfung eingebaut ob das File schon existiert bevor kopiert und gelöscht wird.

Code
//aktuelles Dokument  
var currentDocument=app.activeDocument;

//Neuer Basisordner erzeugen
var baseFolder = new Folder("/c/Hier_neuer_Basis_Pfad");
if(!baseFolder.exists){
baseFolder.create();
}

for(j=0;j < currentDocument.links.length; j++){ // durchlaufe alle Links im Dokument
var aLink = currentDocument.links[j];

if(aLink.status==LinkStatus.NORMAL){ //Verknüpfung stimmt
if(aLink.linkType=="Adobe Portable Document Format (PDF)"){
var f = new File(aLink.filePath);
//Unterordner erzeugen
var subfolderName = f.path.substring(f.path.lastIndexOf("/")+1, f.path.length);
var subfolder = new Folder(baseFolder+"/"+subfolderName);
if(!subfolder.exists){
subfolder.create();
}

var newFilename = baseFolder+"/"+ subfolderName +"/"+f.name;
var newFile = new File(baseFolder+"/"+ subfolderName +"/"+f.name);
if(!newFile.exists){
f.copy(newFilename);
aLink.relink(newFile);
f.remove();
}
}
}
}

currentDocument.links.everyItem().update();



Gruss

Flo

[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

23. Nov 2009, 09:28
Bewertung:

gelesen: 9712

Beitrag als Lesezeichen
Hi,

gibt es eigentlich kein Move, also so etwas wie
var f = new File(filePath);
f.Move(newFilePath)?

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

23. Nov 2009, 09:55
Bewertung:

gelesen: 9694

Beitrag als Lesezeichen
Nein.

copy() und remove(), wie von Florian angewandt.

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 23. Nov 2009, 10:06 geändert)

[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

23. Nov 2009, 10:03
Bewertung:

gelesen: 9688

Beitrag als Lesezeichen
Danke,

auch kein Rename? Move und Rename sind oft in Ihrer Funktion identisch.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

23. Nov 2009, 10:07
Bewertung:

gelesen: 9687

Beitrag als Lesezeichen
Ok. Rename() ist vorhanden. ;-)
Code
rename()  

fileObj.rename (newName)
newName The new file name, with no path.

Renames the associated file. Does not resolve aliases, but renames the referenced alias or shortcut
file itself.

Returns true on success.


Viele Grüße
Martin


[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

23. Nov 2009, 10:11
Bewertung:

gelesen: 9682

Beitrag als Lesezeichen
Danke,

ich habe das gerade selbst nachgesehen, leider ohne Pfad. da wurde wohl ein wenig Funktionalität ausgeklammert.

MSJava kann das, bei Sun weiß ich es nicht.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

23. Nov 2009, 10:11
Bewertung:

gelesen: 9683

Beitrag als Lesezeichen
Hallo Werner,

einen "move"-Befehl gibt es nicht. Nur "copy" und "remove".

Aber vielleicht kann mir hier im Forum einer die Funktion "changePath" erklären. Wofür braucht man denn diese Funktion? Man ändert den Pfad eines File oder Folder-Objekts, aber man verschiebt ihn nicht. Kennt jemand einen Anwendungsfall wo das relevant wäre?

Gruss

Flo

[JavaScript] PDFs verschieben ...

kkauer
Beiträge gesamt: 661

23. Nov 2009, 10:39
Bewertung:

gelesen: 9665

Beitrag als Lesezeichen
Antwort auf [ WernerPerplies ] MSJava kann das, bei Sun weiß ich es nicht.

und was hat das mit dem hier diskutierten JavaSCRIPT zu tun?

[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

24. Nov 2009, 07:39
Bewertung:

gelesen: 9607

Beitrag als Lesezeichen
Flo,

wenn ich die Doku richtig interpretiere:
(changePath()
fileObj.changePath (path)
path A string containing the new path, absolute or relative to the current folder.
Changes the path specification of the referenced file.
Returns true on success.

Ändert ChangePath den Pfad des Filobjects:

Nicht getestete Beispielanwendung (bitte ggf. korrigieren):

var workFile = new File("/InDesign/Kunden/Maier/myFile.txt");
workFile.ChangePath("/InDesign/Kunden/Müller/);
workfFile.Path -> "/InDesign/Kunden/Müller/

Du müsstest dann mal testen, was man mit dem geänderten Fileobject anfangen kann.

HTH

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

[JavaScript] PDFs verschieben ...

flobuc
Beiträge gesamt: 246

24. Nov 2009, 08:45
Bewertung:

gelesen: 9594

Beitrag als Lesezeichen
Hallo Werner,

genau so ist es.
Und ich überlege was ich mit einem derart geänderten File-Objekt anfangen soll?

Gruss

Flo

[JavaScript] PDFs verschieben ...

Martin Fischer
  
Beiträge gesamt: 12783

24. Nov 2009, 08:52
Bewertung:

gelesen: 9590

Beitrag als Lesezeichen
Hallo Florian,

> Und ich überlege was ich mit einem derart geänderten File-Objekt anfangen soll?

Mir geht es wie Dir.
Bin auch etwas ratlos.

Viele Grüße
Martin


[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

24. Nov 2009, 09:10
Bewertung:

gelesen: 9578

Beitrag als Lesezeichen
Hallo Flo,

ich programmiere ja nicht mit JavaScript, aber warum probierst Du nicht einfach mal etwas aus?

Wie wäre es mit

workfFile.Write("Diesen Text"), einmal ohne existierenden Pfad, wenn's einen Fehler gibt mit existierendem Pfad.

Generell hast Du wohl nach ChangePath ein FileObject, das alle Eigenschaften der Ursprungsdatei hat, z. B.:

Mac: Creator,
displayName
encoding,
eventurell exists, falls die Datei mit geändertem Pfad auch existiert.
fsName
...

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

[JavaScript] PDFs verschieben ...

WernerPerplies
Beiträge gesamt: 2762

24. Nov 2009, 09:20
Bewertung:

gelesen: 9573

Beitrag als Lesezeichen
Martin,

vielleicht z. B. so etwas:

var workFile = new File("/InDesign/Kunden/Maier/myFile.txt");
workFile.ChangePath("/InDesign/Kunden/Müller/);
workFile.Linefeed = "\r\n";
workFile.Write(MacString);
müsste doch eine PC-Datei mit korrektem Zeilenende erzeugen?

oder den CreatorType ändern...

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen