Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Datenzusammenfassungen als Dateiname

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

2. Sep 2019, 19:59
Bewertung:

gelesen: 831

Beitrag als Lesezeichen
Moin Moin.

Ich war auf der suche nach einem Skript, welcher ein Datenblatt mit Daten aus einer .csv per batch als .pdf exportiert. Ich konnte schnell einen Skript finden der dies ermöglichte.

Blöderweise funktioniert dieser nur mit einmal pro InDesign file. 130 Produkte mit verschiedenen Attributen machen das ganze riesig. Alles in einem .csv file. Ich hoffe Ihr versteht was ich hier zu beschreiben versuche.

Die Lösung wäre ein dynamischer Dateiname, wenn ich den batch ausführe. Ich bekomms einfach nicht hin

Der Dateiname steckt in der ersten Spalte der .csv und sollte doch irgendwie verwendbar sein.
Es hat wie mir scheint etwas mit 'dataMergeProperties' zu tun. Kann man im Skript bei der Datenzusammenführung auch direkt auf die Variable <<NAME>> hinweisen?

Fragen über Fragen. Fühlt sich an als ob mein Kopf jeden Moment platzen würde.

Als Vorlage benutze ich diese beiden Skripte. Den ersten wollte ich versuchen provisorisch zum Laufen bringen: vergebens...

Code
var myPresets = ["Datasheet"];     

var myDoc = app.documents.firstItem();
var myFilePath = (myDoc.saved == true)
? myDoc.filePath
: '~/Desktop';
for (onePreset=0; onePreset < myPresets.length; onePreset++){
var pdfFile = new File( myFilePath +'/' + cut_suffix(myDoc.name ) + '_' + myCleanFileName(myPresets[onePreset]) + '.pdf' )
try{
myDoc.exportFile(ExportFormat.pdfType, pdfFile, false, myPresets[onePreset]);
}
catch(e){
alert("Error\nIst das Vorgabeset \"" + myPresets[onePreset] + "\" tatsächlich vorhanden?")
};
}

// Funktion zum Abtrennen der Dateiendung
function cut_suffix (oneFile) {
return oneFile.replace(/.indd$/i, '') ;
}

// Funktion zum Einlesen der PDF-Vorgabesets
function myGetPDFPresets(){
var myPDFPresets = new Array;
for(var onePreset = 0; onePreset < app.pdfExportPresets.length; onePreset++){
myPDFPresets.push(app.pdfExportPresets.item(onePreset).name);
}
return myPDFPresets;
}

// Funktion zum Ersetzen von (hinsichtlich des Dateisystems) problematischen
// Zeichen im Namen eines Vorgabesets (Slash, Backslash, Doppelpunkt)
function myCleanFileName(oneFilename){
var oneFilename = String(oneFilename.split('/').join('_').split('\\').join('_').split(':').join('¯'));
return oneFilename;
}


Bei dem zweiten sind die Dateinamen Zusammensetzung interessant für mich. Den Code hab ich ein bisschen verkürzt. Jegliche Hilfe würde mir gut tun. Ich danke schonmal herzlichst im voraus.

Code
//csv einlesen  
var fileNames = new Array();
csvFile.open('r');
while (!csvFile.eof) {
fileNames.push(csvFile.readln().split(csvSeparator)[fileNameColumn-1]);
}
csvFile.close();


var currDoc = app.activeDocument;//vorbereitetes Dokument
currDoc.dataMergeOptions.createNewDocument = true;

var maxRange = currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}

currDoc.dataMergeProperties.mergeRecords();
app.activeDocument.save(File(destFolderPath +fileNames[i+1] + '.indd'));
// Alle offenen Dokumente verarbeiten
for( oneDoc = 0 ; oneDoc < myDocs.length ; oneDoc++ ){
myCounter++;
myFile = myDocs[oneDoc];
progress.file.text = myCounter+"/"+maxDocs+": "+myFile.name;
progress.bar.value= myCounter*2-1;
myFile.save();
progress.bar.value= myCounter*2-0.01;
if (myFile.saved) {
// Entscheiden, ob auf Schreibtisch oder im Dokumentordner exportiert wird
if (dlg.savetodesktop.value) {
var path = '~/Desktop';
} else {
var path = myFile.filePath;
}
// Dateiname setzen
var pdfFile = new File( path +'/' + cutFileName(myFile.name ) + suffix + '.pdf' )
try{
// PDF exportieren
myFile.exportFile(ExportFormat.pdfType, pdfFile, false, myPreset.toString() );
exportedDocs++;
}
catch(e){
errors = errors + "\n" + myFile.name + localize(msgExportError);
};
} else {
errors = errors + "\n" + myFile.name + localize(msgSaveError);
}

if (dlg.closedocs.value) { myFile.close(); oneDoc--;}
}

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 13:26
Bewertung:

gelesen: 782

Beitrag als Lesezeichen
Update:

Folgender Link sieht interessant aus. Bekomme jedoch keine ausführliche Information zu dem Script und der Sample funktioniert auch nicht :(

https://colecandoo.com/2017/03/05/data-merge-to-uniquely-named-interactive-pdfs/

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 16:23
Bewertung:

gelesen: 762

Beitrag als Lesezeichen
Grosses Update:

Durch suchen und stöbern bin ich auf den Code gestossen, welcher funktioniert!!

Code
var fileNameColumn = 1;//Bitte hier die Spaltennummer eintragen, in der in der CSV der neue Dateiname hinterlegt ist.  
var csvSeparator = ','//Bitte hier den Separator der CSV-Datei eintragen

var destFolderPath = Folder.selectDialog('Zielordner wählen').absoluteURI + '/' ;
var csvFile = File.openDialog('CSV-Datei wählen');

//csv einlesen
var fileNames = new Array();
csvFile.open('r');
while (!csvFile.eof) {
fileNames.push(csvFile.readln().split(csvSeparator)[fileNameColumn-1]);
}
csvFile.close();



//var myPresets = ["Datasheet"];


var currDoc = app.activeDocument;//vorbereitetes Dokument
currDoc.dataMergeOptions.createNewDocument = true;

var maxRange = currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}

currDoc.dataMergeProperties.mergeRecords();

app.activeDocument.save(File(destFolderPath +fileNames[i+1] + '.indd'));
app.activeDocument.close();
}
function myGetPDFPresets(){
var myPDFPresets = new Array;
for(var onePreset = 0; onePreset < app.pdfExportPresets.length; onePreset++){
myPDFPresets.push(app.pdfExportPresets.item(onePreset).name);
}
return myPDFPresets;
}


Nun bin ich seit Stunden dabei, den Export als .pdf zu bewerkstelligen, anstatt es als .indd zu speichern. Keine Ahnung was ich hier falsch mache. Hat jemand eine Vervollständigung zu diesem Lösungsansatz? Ein Dank geht an alle Helfer und Brains da draussen!

Datenzusammenfassungen als Dateiname

-hans-
Beiträge gesamt: 746

3. Sep 2019, 16:48
Bewertung:

gelesen: 751

Beitrag als Lesezeichen
huhu,

pdf erstellen geht über die Methode 'exportFile'

schau mal hier: https://www.indesignjs.de/...l#d1e49265__d1e53630
Lieben Gruß

Hans-Gerd Claßen

(Dieser Beitrag wurde von -hans- am 3. Sep 2019, 16:49 geändert)

Datenzusammenfassungen als Dateiname

Martin Fischer
  
Beiträge gesamt: 12137

3. Sep 2019, 16:53
Bewertung:

gelesen: 746

Beitrag als Lesezeichen
Hallo Roody4ever,

verwende zum Exportieren in PDF den exportFile()-Befehl des Dokument-Objekts.

Beispiel (gegeben ein Array myPDFPresets mit PDF-Vorgaben):
Code
var pdfFile = new File('~/Desktop/test.pdf'); 
var pdfPreset = myPDFPresets[0];

app.activeDocument.exportFile(ExportFormat.pdfType, pdfFile, false, pdfPreset);


Platziere den Exportbefehl vor oder nach der Stelle, an der bislang das Dokument gesichert wird.

Viele Grüße
Martin


Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 17:48
Bewertung:

gelesen: 732

Beitrag als Lesezeichen
YESSSS!!

Danke für eure Antworten und danke an das HDS Forum selbst.
Der JavaSkript läuft ganz zu meiner Zufriedenheit.

Code
var fileNameColumn = 1;//Bitte hier die Spaltennummer eintragen, in der in der CSV der neue Dateiname hinterlegt ist.  
var csvSeparator = ','//Bitte hier den Separator der CSV-Datei eintragen

var destFolderPath = Folder.selectDialog('Zielordner wählen').absoluteURI + '/' ;
var csvFile = File.openDialog('CSV-Datei wählen');

//csv einlesen
var fileNames = new Array();
csvFile.open('r');
while (!csvFile.eof) {
fileNames.push(csvFile.readln().split(csvSeparator)[fileNameColumn-1]);
}
csvFile.close();



var myPresets = ["Datasheet"];


var currDoc = app.activeDocument;//vorbereitetes Dokument
currDoc.dataMergeOptions.createNewDocument = true;

var maxRange = currDoc.dataMergeProperties.dataMergePreferences.recordRange.split('-')[1];//Anzahl der Datensätze in der CSV
//schleife durch die Datensätze
for(var i = 0; i < maxRange; i++)
{
with(currDoc.dataMergeProperties.dataMergePreferences)
{
recordSelection = RecordSelection.ONE_RECORD;
recordNumber = i+1;
}


currDoc.dataMergeProperties.mergeRecords();
var myDoc = app.documents.firstItem();
var myFilePath = (myDoc.saved == true)
? myDoc.filePath
: '~/Desktop/DATA';
var pdfFile = new File( destFolderPath +fileNames[i+1] + '.pdf' );
var pdfPreset = myPresets[0];

app.activeDocument.exportFile(ExportFormat.pdfType, pdfFile, false, pdfPreset)
app.activeDocument.save(File(destFolderPath +fileNames[i+1] + '.indd'));


app.activeDocument.close();
}
function myGetPDFPresets(){
var myPDFPresets = new Array;
for(var onePreset = 0; onePreset < app.pdfExportPresets.length; onePreset++){
myPDFPresets.push(app.pdfExportPresets.item(onePreset).name);
}
return myPDFPresets;
}

Datenzusammenfassungen als Dateiname

Uwe Laubender
Beiträge gesamt: 4503

3. Sep 2019, 18:18
Bewertung:

gelesen: 720

Beitrag als Lesezeichen
Antwort auf: huhu,

pdf erstellen geht über die Methode 'exportFile'

schau mal hier: https://www.indesignjs.de/...l#d1e49265__d1e53630


Oder aber über:

asynchronousExportFile()

Details z.B. hier:
https://www.indesignjs.de/...d1e208127__d1e209675

Als Alternative zu exportFile(), falls folgender Bug eine Rolle spielen sollte:


[JS][CS4/CS5] Images dropping off in scripted pdf export
https://forums.adobe.com/message/3876223#3876223

Zitat The problem: Placed Illustrator files (and pdfs) drop off of exported pdfs, without any kind of error being raised, after a user tries to interact with InDesign while it's tied up during a script which opens and exports one file after another. Once an image drops off, it will be missing from every subsequently exported pdf until the script completes. The pdfs are valid—they open and display just fine—they just don't contain all the images they're supposed to. Placed raster images are not affected.

*****
Mit herzlichem Gruß,
Uwe Laubender

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

4. Sep 2019, 11:03
Bewertung:

gelesen: 666

Beitrag als Lesezeichen
Antwort auf: asynchronousExportFile()

Details z.B. hier:
https://www.indesignjs.de/...d1e208127__d1e209675

Als Alternative zu exportFile(), falls folgender Bug eine Rolle spielen sollte:


[JS][CS4/CS5] Images dropping off in scripted pdf export
https://forums.adobe.com/message/3876223#3876223


Werde die Augen offen halten. Danke Uwe!