[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Datenzusammenfassungen als Dateiname

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

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

2. Sep 2019, 19:59
Beitrag # 1 von 8
Bewertung:
(811 mal gelesen)
URL zum Beitrag
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--;}
}

X

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 13:26
Beitrag # 2 von 8
Beitrag ID: #571735
Bewertung:
(762 mal gelesen)
URL zum Beitrag
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/


als Antwort auf: [#571725]

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 16:23
Beitrag # 3 von 8
Beitrag ID: #571738
Bewertung:
(742 mal gelesen)
URL zum Beitrag
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!


als Antwort auf: [#571735]

Datenzusammenfassungen als Dateiname

-hans-
Beiträge gesamt: 746

3. Sep 2019, 16:48
Beitrag # 4 von 8
Beitrag ID: #571740
Bewertung:
(731 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#571738]
(Dieser Beitrag wurde von -hans- am 3. Sep 2019, 16:49 geändert)

Datenzusammenfassungen als Dateiname

Martin Fischer
  
Beiträge gesamt: 12120

3. Sep 2019, 16:53
Beitrag # 5 von 8
Beitrag ID: #571741
Bewertung:
(726 mal gelesen)
URL zum Beitrag
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




als Antwort auf: [#571738]

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

3. Sep 2019, 17:48
Beitrag # 6 von 8
Beitrag ID: #571745
Bewertung:
(712 mal gelesen)
URL zum Beitrag
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;
}



als Antwort auf: [#571725]

Datenzusammenfassungen als Dateiname

Uwe Laubender
Beiträge gesamt: 4491

3. Sep 2019, 18:18
Beitrag # 7 von 8
Beitrag ID: #571747
Bewertung:
(700 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#571740]

Datenzusammenfassungen als Dateiname

Roody4ever
Beiträge gesamt: 5

4. Sep 2019, 11:03
Beitrag # 8 von 8
Beitrag ID: #571752
Bewertung:
(646 mal gelesen)
URL zum Beitrag
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!


als Antwort auf: [#571747]
X

Aktuell

PDF / Print
The Great (Online) PDF Show-300x300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
17.10.2019

Digicomp Academy AG, Limmatstrasse 50, Zürich
Donnerstag, 17. Okt. 2019, 18.00 - 20.30 Uhr

Vortrag

Farben sind ein wichtiges Gestaltungselement in Corporate Design und Branding. Als Sinneseindruck, der von Beleuchtung, Materialeigenschaften und Kontext abhängt, ist eine Farbe jedoch schwer zu fassen. Der Verein freieFarbe setzt sich für eine offene, digitale Farbkommunikation ein und hat hierzu das HLC-Farbsystem entwickelt. Dieses hilft, zwischen Gestaltung am Computer, physischen Farbmustern und unterschiedlichen Verfahren in der Produktion eine Brücke zu schlagen. Es basiert zudem auf bestehenden ISO-Standards für die Druckindustrie.

Donnerstag, 17. Oktober 2019, 18 bis 20.30 Uhr

Ja

Organisator: Digicomp Academy AG

https://www.meetup.com/de-DE/Publishing-Group-Switzerland/events/264611769/

Freie Farbe für die digitale Zukunft
Veranstaltungen
21.10.2019 - 22.10.2019

München
Montag, 21. Okt. 2019, 09.30 Uhr - Dienstag, 22. Okt. 2019, 17.30 Uhr

Schulung, Seminar

Wer hochwertige und farbechte Ergebnisse im Digitaldruck erzielen will, der braucht umfassende Colormanagemement- und PDF-Kenntnisse. Selbst wenn die Maschine kalibriert und das Rip richtig konfiguriert ist, lassen die Ergebnisse oft zu wünschen übrig. Der Grund hierfür liegt zu 90 % in den Daten und in falsch eingestellten Anwendungsprogrammen, auch in falschen Einstellungen im Druckmenü.

Nein

Organisator: Cleverprinting.de

https://www.cleverprinting.de/zweitaegige-weiterbildung-zum-digitaldruck-operator/

Zweitägige Weiterbildung zum Digitaldruck-Operator