[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt All Dateien eines Buches als .idml exportieren (JS)

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

All Dateien eines Buches als .idml exportieren (JS)

fabiantheblind
Beiträge gesamt:

20. Dez 2010, 08:29
Beitrag # 1 von 6
Bewertung:
(11407 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten morgen gutes Forum,

ich habe mal eine Frage. Ich versuche gerade, wie der Titel des Themas sagt, Buch Dokumente als .idml zu exportieren mit diesem code:

Code
// export all docs of book as idml to choosen folder 
// based on //doScriptWithDocsOfBooks.js
// found on http://indesign.hilfdirselbst.ch/oberflache/skript-in-allen-dokumenten-der-geoffneten-buchern-ausfuhren.html
// export selection as jpg
// found on: http://indisnip.wordpress.com/2010/08/09/export-selection-to-jpeg/
main();
function main(){
if ( app.books.length < 1 ){
errorExit( 'Fehler\rMindestens ein Buch muss geoeffnet sein.' );
}

//var theFolder = Folder.selectDialog ("Choose a FOLDER to exportTo");
var theFolder= "~/Desktop";
alert(theFolder);

for ( var b = 0; b < app.books.length; b++ )
doBook( app.books[b],theFolder);
}

function doBook( aBook,theFolder ){
for ( var i = 0; i < aBook.bookContents.length; i++ ){
var doc = aBook.bookContents[i];
var aName = doc.name;
var newName = aName.replace("indd","idml");
var theFile = File(theFolder +"/"+ newName );
doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);

}
}


Leider sagt er mir so
Code
doc.exportFile 

sei keine Funktion.

Wenn ich den code so laufen lasse.
Code
var theFolder= "~/Desktop/idml"; 
var doc = app.activeDocument;
var aName = doc.name;
var newName = aName.replace("indd","idml");
var theFile = File(theFolder +"/"+ newName );
doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);


Kann er es exportieren. Wo mache ich einen Fehler?
Kann mir jemand helfen?

Grüsse :F
X

All Dateien eines Buches als .idml exportieren (JS)

Neil77
Beiträge gesamt: 287

20. Dez 2010, 10:39
Beitrag # 2 von 6
Beitrag ID: #460072
Bewertung:
(11385 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

book.bookContents gibt dir kein document zurück, sondern ein Objekt BookContent.
Du musst wohl über bookContent.fullName den Dateinamen auslesen und diese Datei öffnen, also in etwa
Code
var content = aBook.bookContents[i]; 
var doc = app.open(content.fullName);

Du kannst bei app.open() auch per Parameter bestimmen, dass dafür kein Fenster geöffnet wird - das Schließen des Dokuments solltest du dann aber auf jeden Fall per Skript selbst vornehmen.

Grüße, Martin


als Antwort auf: [#460057]

All Dateien eines Buches als .idml exportieren (JS)

fabiantheblind
Beiträge gesamt:

20. Dez 2010, 11:56
Beitrag # 3 von 6
Beitrag ID: #460079
Bewertung:
(11363 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super!
Das funktioniert mit absoluten Pfaden.

Noch eine Frage:
Wenn ich versuche die Ordner mit einem Dialog zu wählen, etwa so:
Dann sagt er mir er könnte die Datei nicht finden.:
Code
E/A-Fehler: Der Ordner ""~/Desktop/testSource/testBook.indb"" kann nicht gefunden werden. 


Warum funktioniert es mit dem realtivem Pfad nicht?
Ich habe mal den betreffenden teil in ein try/catch eingeschlossen.
Code
main(); 
function main(){

var sourceFolder = Folder.selectDialog ("Choose a source FOLDER ");
var targetFolder =Folder.selectDialog ("Choose a target FOLDER");
try{
var aBook = app.books.add(sourceFolder + "/testBook.indb");
} catch(e){
$.writeln(e);
exit();

}

var docs = new Array();
for (var i = 0; i < 5;i ++){
docs[i] = app.documents.add();
docs[i].save(sourceFolder + "/"+docs[i].name + ".indd");
aBook.bookContents.add(docs[i].fullName);
docs[i].close(SaveOptions.YES);
}


if ( app.books.length < 1 ){
errorExit( "you need at least one book" );
}

var theFolder= "~/Desktop/target";
for ( var b = 0; b < app.books.length; b++ )
doBook( app.books[b],theFolder);
}

function doBook( aBook,theFolder ){
for ( var i = 0; i < aBook.bookContents.length; i++ ){
var content = aBook.bookContents[i];
var doc = app.open(content.fullName);
var aName = doc.name;
var newName = aName.replace("indd","idml");
var theFile = File(targetFolder +"/"+ newName );
doc.exportFile(ExportFormat.INDESIGN_MARKUP, theFile, false);
doc.close(SaveOptions.NO);

}
}



als Antwort auf: [#460072]

All Dateien eines Buches als .idml exportieren (JS)

zaphodbeeblebroxx
Beiträge gesamt: 408

21. Dez 2010, 22:32
Beitrag # 4 von 6
Beitrag ID: #460189
Bewertung:
(11285 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo,

mit einem relativen Pfad aus dem Auswahldialog geht es so:

Code
var _sourceFolder = Folder.selectDialog ("Choose a source FOLDER ");  

if (_sourceFolder){

var _bookPath = new File (_sourceFolder + "/testBook.indb");
var _newBook = app.books.add(_bookPath);

// do something with _newBook

}

else{

//alert("Auswahldialog abgebrochen");

}



als Antwort auf: [#460079]

All Dateien eines Buches als .idml exportieren (JS)

Tim Ludwig
Beiträge gesamt: 97

17. Aug 2021, 10:39
Beitrag # 5 von 6
Beitrag ID: #580863
Bewertung:
(7351 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

gibt es das fertige Skript irgendwo für alle? Könnte es aktuell auch gut gebrauchen.

Vielen Grüße
Tim


als Antwort auf: [#460189]

All Dateien eines Buches als .idml exportieren (JS)

Uwe Laubender
Beiträge gesamt: 5316

17. Aug 2021, 18:21
Beitrag # 6 von 6
Beitrag ID: #580874
Bewertung:
(7289 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Tim,

falls Du alle InDesign-Dateien des Buches nicht völlig verteilt über Deine Festplatte gespeichert hast, dann empfehle ich Dir dieses Skript für die Ausgabe:

Batch-process (convert/export/import) documents
Peter Kahrel
https://creativepro.com/...n/batch_convert.html

Ah, ich sehe gerade, Peter hat unlängst ein Feature aufgewertet, das Du für Deinen Fall aber nicht benötigst:

Zitat Version history
1 Aug. 2021: you can now add more than one script in the 'Run a script' field. See the text for details.



als Antwort auf: [#580863]
X