Skip to main content
Participant
January 27, 2021
Answered

Export mutations with several different layers

  • January 27, 2021
  • 5 replies
  • 1013 views

Hey dear community!

 

Can you export the same Document (PDF) several times automatically? Because I often have like 10 or 20 Code-Mutations on a payment slip on my Doc and I always have to export them manually one at a time. Would be perfect if I could select the layers that should be exported in succession (with the main layer always exported logically).

 

Does anybody know about a Script or a function in Indesign which can do that? Couldn't google anything about it 😕😕

 

Cheers and thanks, Sebastian

 



[ attachment inserted as inline image by moderator ]

This topic has been closed for replies.
Correct answer Mike Bro

Hi sebastianp39925710,

 

Give the below code a try for your needs.

 

var doc = app.activeDocument;
var myFolder = doc.filePath;

export_preset = app.pdfExportPresets.itemByName("[High Quality Print]");

if (!(export_preset.isValid)){ 
    alert('The PDF export preset does not exist.'); 
    exit(); 
   }

function myGetVisibleLayers(){
 var myVisibleLayers = new Array;
  for (var i = 0; i < doc.layers.length; i++){
   if (doc.layers[i].visible == true) {   
    myVisibleLayers.push(doc.layers[i].index);
      }
   }
      return myVisibleLayers;
  }

 //Layers Manager Dialog/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  var layerNames = [];

   for (var i = 0; i < doc.layers.length; i++) {
   layerNames.push(doc.layers[i].name);
   }
   var myW = new Window ("dialog", "Layers Manager"), 
   layerGroup = myW.add("group");
   layerGroup.alignChildren = "row";
   var columns = myW.add("group"); columns.spacing=20;
   
   layerGroup.add ('statictext', [-55,28,200, 43], "Select Base Layer(s)");
   var base = columns.add ("listbox", [30, 0, 275, 300] , layerNames, {multiselect: true});
   base.revealItem (doc.layers.length -i/1);
   var selectedBase = []; 
   for (var i = 0; i < base.items.length; i++){selectedBase[0] = base.items[i];}
   base.selection = selectedBase; 

   layerGroup.add ('statictext', [365, 28,603,43], "Select Version Layer(s)");   
   var versions = columns.add ("listbox", [30, 0, 275, 300] , layerNames, {multiselect: true});
   versions.revealItem (doc.layers.length -i/1);   
   var selected = []; 
   for (var i = 0; i < versions.items.length-1; i++){selected[i] = versions.items[i];}
   versions.selection = selected;

   var btn = myW.add("group");
   btn.orientation = "row";
   btn.alignment = ["right", "top"];
   var cancelBtn = btn.add ("button", undefined, "Cancel", {name:"Cancel"});
   var okBtn = btn.add ("button", undefined, "OK", {name:"OK"});
   
   var myResult = myW.show()   
   if(myResult == 1){  
   main();  
   }  
   else if (myResult== 2){  
   exit(0);  
   }  
   function main(){ 

///pdf /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   if (base.selection == null){
  alert ('Error!\nNo base layer was selected for pdf Output. Please try again.') 
  exit();
  }
  else if (versions.selection == null){
  alert ('Error!\nNo version layers(s) were selected for pdf Output. Please try again.')
  exit();
  }
 var lookup = {};
 for (var j in versions.selection) {lookup[versions.selection[j]] = versions.selection[j];}
 for (var i in base.selection) {
 if (typeof lookup[base.selection[i]] != 'undefined'){
 alert('The layer "'+ [base.selection[i]] + '" cannot be both a base and version layer.\nPlease try again.');
 exit ();
 break;
 } 
 }

 var myVisibleLayers = myGetVisibleLayers();
      
  doc.layers.everyItem().visible = false;

  for (var i = 0; i < base.selection.length; i++){
  var myBase = base.selection[i].index;

  doc.layers[myBase].visible =  true; 
  }

  for (var i = 0; i < versions.selection.length; i++){
  var myVersion = versions.selection[i].index;

  var my_layer = doc.layers[myVersion].name;

  doc.layers[myVersion].visible = true;
  
  app.pdfExportPreferences.pageRange = PageRange.ALL_PAGES

  doc.exportFile(ExportFormat.PDF_TYPE, File(myFolder +'/'+ my_layer + ".pdf"), false, export_preset);

  doc.layers[myVersion].visible = false;
}
  doc.layers.everyItem().visible = false;

  for (var i = 0; i < myVisibleLayers.length; i++){  
    var myLayers = myVisibleLayers[i];
    doc.layers[myLayers].visible =  true; 
    }
    alert('Done Exporting the selected Layers to a PDF!');
}

 

 

Regards,

Mike

 

 

5 replies

Mike BroCorrect answer
Legend
January 27, 2021

Hi sebastianp39925710,

 

Give the below code a try for your needs.

 

var doc = app.activeDocument;
var myFolder = doc.filePath;

export_preset = app.pdfExportPresets.itemByName("[High Quality Print]");

if (!(export_preset.isValid)){ 
    alert('The PDF export preset does not exist.'); 
    exit(); 
   }

function myGetVisibleLayers(){
 var myVisibleLayers = new Array;
  for (var i = 0; i < doc.layers.length; i++){
   if (doc.layers[i].visible == true) {   
    myVisibleLayers.push(doc.layers[i].index);
      }
   }
      return myVisibleLayers;
  }

 //Layers Manager Dialog/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  var layerNames = [];

   for (var i = 0; i < doc.layers.length; i++) {
   layerNames.push(doc.layers[i].name);
   }
   var myW = new Window ("dialog", "Layers Manager"), 
   layerGroup = myW.add("group");
   layerGroup.alignChildren = "row";
   var columns = myW.add("group"); columns.spacing=20;
   
   layerGroup.add ('statictext', [-55,28,200, 43], "Select Base Layer(s)");
   var base = columns.add ("listbox", [30, 0, 275, 300] , layerNames, {multiselect: true});
   base.revealItem (doc.layers.length -i/1);
   var selectedBase = []; 
   for (var i = 0; i < base.items.length; i++){selectedBase[0] = base.items[i];}
   base.selection = selectedBase; 

   layerGroup.add ('statictext', [365, 28,603,43], "Select Version Layer(s)");   
   var versions = columns.add ("listbox", [30, 0, 275, 300] , layerNames, {multiselect: true});
   versions.revealItem (doc.layers.length -i/1);   
   var selected = []; 
   for (var i = 0; i < versions.items.length-1; i++){selected[i] = versions.items[i];}
   versions.selection = selected;

   var btn = myW.add("group");
   btn.orientation = "row";
   btn.alignment = ["right", "top"];
   var cancelBtn = btn.add ("button", undefined, "Cancel", {name:"Cancel"});
   var okBtn = btn.add ("button", undefined, "OK", {name:"OK"});
   
   var myResult = myW.show()   
   if(myResult == 1){  
   main();  
   }  
   else if (myResult== 2){  
   exit(0);  
   }  
   function main(){ 

///pdf /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   if (base.selection == null){
  alert ('Error!\nNo base layer was selected for pdf Output. Please try again.') 
  exit();
  }
  else if (versions.selection == null){
  alert ('Error!\nNo version layers(s) were selected for pdf Output. Please try again.')
  exit();
  }
 var lookup = {};
 for (var j in versions.selection) {lookup[versions.selection[j]] = versions.selection[j];}
 for (var i in base.selection) {
 if (typeof lookup[base.selection[i]] != 'undefined'){
 alert('The layer "'+ [base.selection[i]] + '" cannot be both a base and version layer.\nPlease try again.');
 exit ();
 break;
 } 
 }

 var myVisibleLayers = myGetVisibleLayers();
      
  doc.layers.everyItem().visible = false;

  for (var i = 0; i < base.selection.length; i++){
  var myBase = base.selection[i].index;

  doc.layers[myBase].visible =  true; 
  }

  for (var i = 0; i < versions.selection.length; i++){
  var myVersion = versions.selection[i].index;

  var my_layer = doc.layers[myVersion].name;

  doc.layers[myVersion].visible = true;
  
  app.pdfExportPreferences.pageRange = PageRange.ALL_PAGES

  doc.exportFile(ExportFormat.PDF_TYPE, File(myFolder +'/'+ my_layer + ".pdf"), false, export_preset);

  doc.layers[myVersion].visible = false;
}
  doc.layers.everyItem().visible = false;

  for (var i = 0; i < myVisibleLayers.length; i++){  
    var myLayers = myVisibleLayers[i];
    doc.layers[myLayers].visible =  true; 
    }
    alert('Done Exporting the selected Layers to a PDF!');
}

 

 

Regards,

Mike

 

 

Participant
January 27, 2021

Thanks you two for the quick replies!

 

I have CC Pro, Indesign 16.0.1, Windows 10.

 

@Eric DumasThanks for the info, I will look into Data Merge. I'm always happy to learn new ways.

 

@Mike Brothanks for the script - I'll also try that!

 

Cheers for now

Eric Dumas
Community Expert
Community Expert
January 27, 2021

Hi,

can you confirm the exact version of your software and operating system?

Have you considered creating a data merge approach instead of layers?