[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:
(973 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:
(924 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:
(904 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:
(893 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: 12181

3. Sep 2019, 16:53
Beitrag # 5 von 8
Beitrag ID: #571741
Bewertung:
(888 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:
(874 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: 4535

3. Sep 2019, 18:18
Beitrag # 7 von 8
Beitrag ID: #571747
Bewertung:
(862 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:
(808 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

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
18.11.2019

Düsseldorf
Montag, 18. Nov. 2019, 09.30 Uhr

Schulung, Seminar

Mit WordPress ist es möglich, ohne große Kosten und ohne Programmierkenntnisse eine ansprechende Webseite zu erstellen, die allen Anforderungen des modernen Webdesigns – besonders unter Beachtung der Suchmaschinenoptimierung (SEO) – gerecht wird. Unsere Schulung Webdesign mit WordPress zeigt Ihnen, wie Sie hochwertige Webseiten mit WordPress erstellen.

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/schulungen/schulung-webdesign-mit-wordpress/

Suchmaschinen-optimiertes Webdesign mit WordPress
Veranstaltungen
19.11.2019 - 20.11.2019

Düsseldorf
Dienstag, 19. Nov. 2019, 09.30 Uhr - Mittwoch, 20. Nov. 2019, 17.30 Uhr

Schulung, Seminar

Unsere Schulung „Zweitägige Weiterbildung zum Cleverprinting-Reinzeichner“ bietet allen Anwendern, die in Agenturen oder freiberuflich als Reinzeichner bzw. in der Reinzeichnung arbeiten, topaktuelles Grafik- und PrePress-Fachwissen rund um das Thema „Druckdatenerstellung mit InDesign, Photoshop, Acrobat“.

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/zweitaegige-weiterbildung-zum-cleverprinting-reinzeichner/

Zweitägige Weiterbildung zum Cleverprinting-Reinzeichner
Hier Klicken