5 Replies Latest reply on May 21, 2018 4:35 PM by Stephen_A_Marsh

    Splitting a multi page inDesign document into separate .indd files?

    mayaelaine Level 1

      I have a task at work that involves taking a 40-90 page inDesign file every week and saving it as individual .indd files ( Page1.indd, Page2 .indd, Page3 .indd, etc. ) so that more than one person can work on the pages at once. I'm honestly really annoyed that inDesign doesn't have any kind of native feature for this by now, since you can find people looking for the answer to the same problem 7 or 8 years ago...

       

      Additionally, it seems all script fixes for this issue don't work on newer versions of inDesign. I really need one that works for CS6 but even one that worked for CC would be better than the endless wall of broken links from 2012ish that I've found so far. I'm more than willing to try and make one myself but I have absolutely zero experience in script writing. Does anyone have any script answer to this or at least could point me where to start?

        • 1. Re: Splitting a multi page inDesign document into separate .indd files?
          TᴀW Adobe Community Professional & MVP

          Hi Mayaelaine,

           

          Our Extract Pages script (not free) works with all the latest versions of InDesign, from CS6 onwards.

          Check it out here: https://www.id-extras.com/products/extract-pages

           

          HTH,

          Ariel

          • 2. Re: Splitting a multi page inDesign document into separate .indd files?
            Stephen_A_Marsh Adobe Community Professional

            Pages Extractor 1.1 - ©www.loicaigon.com

             

            (I have tested in both CS6 and CC2018)

             

            script.png

             

             

            // 1. Control for documents open. If true, the script launches the dialog
            
            
            if(app.documents.length >0)
            {
              var doc = app.documents[0];
              if(doc.saved==true)
              {
              extractdlg();
              }
              else
              {
              alert("Please save you file first before processing the script");
              }
            }
            else
            {
              alert("No documents open !");
            }
            
            
            // 2. Gathers many infos on the document.
            
            
            function pageinfos()
            {
              var pg = doc.pages;
              var pglg  = pg.length;
              var pFirst = Number(pg[0].name);
              var pLast = Number(pg[pglg-1].name);
              var pgHeigth = doc.documentPreferences.pageHeight;
              var pgWitdh = doc.documentPreferences.pageWidth;
              var docname = String(doc.fullName).replace(/\.indd$/, "");
              var docpath = doc.filePath;
              var docfullname = doc.fullName;
            
            
              var infoarr = [pglg, pFirst, pLast, pgHeigth,pgWitdh,docname,docpath,docfullname];
              return infoarr;
            }
            
            
            
            
            // 3. Main function. First part is the dialog
            
            
            function extractdlg()
            {
              var docfile = String(pageinfos()[7]);
              var dlg = app.dialogs.add({name : "Pages Extractor 1.1 - ©www.loicaigon.com"});
              with(dlg)
              {
              var firstclmn = dialogColumns.add();
              with(firstclmn)
              {
              var firstrow = dialogRows.add();
              with(firstrow)
              {
              var clmn1 = dialogColumns.add();
              with(clmn1)
              {
              var row1 = dialogRows.add();
              row1.staticTexts.add({staticLabel : "Extract pages..."});
              var row2 = dialogRows.add();
              with(row2)
              {
              var r2c2 = dialogColumns.add();
              with(r2c2)
              {
              var r2c2r1 = dialogRows.add();
              var pgStart = r2c2r1.realEditboxes.add({editValue:pageinfos()[1], minWidth: 30});
              }
              var r2c3 = dialogColumns.add();
              with(r2c3)
              {
              var r2c3r1 = dialogRows.add();
              r2c3r1.staticTexts.add({staticLabel : "to"});
              }
              var r2c4 = dialogColumns.add();
              with(r2c4)
              {
              var r2c4r1 = r2c4.dialogRows.add();
              var pgEnd = r2c4r1.realEditboxes.add({editValue:pageinfos()[2], minWidth: 30});
              }
            
              }
              }
              }
              var secondrow = dialogRows.add();
              with(secondrow)
              {
              var clmn2 = dialogColumns.add();
              with(clmn2)
              {
              var row2 = dialogRows.add();
              with(row2)
              {
              var sepbox = checkboxControls.add({staticLabel: "Extract as separate pages", checkedState:false});
              }
              }
              }
              var thirdrow = dialogRows.add();
              with(thirdrow)
              {
              var clmn3 = dialogColumns.add();
              with(clmn3)
              {
              var row3 = dialogRows.add();
              with(row3)
              {
              var rembox = checkboxControls.add({staticLabel: "Remove pages after extraction", checkedState:false});
              }
              }
              }
              var foutrhrow = dialogRows.add();
              with(foutrhrow)
              {
              var clmn4 = dialogColumns.add();
              with(clmn4)
              {
              var row4 = dialogRows.add();
              with(row4)
              {
              var savebox = checkboxControls.add({staticLabel: "Choose other extraction folder", checkedState:false});
              }
              }
              }
              }
              }
            
            
              // If the user made good choices, the script operates.
            
              if(dlg.show()==true)
              {
              if(pgStart.editValue >= pageinfos()[2] || pgEnd.editValue <= pageinfos()[1])
              {
              alert("The pages numbers may be at least "+pageinfos()[1] +" for the first page of the range and "+ pageinfos()[2] + " at maximum for the last page");
              }
              else
              {
              // If the user choose to pick a different folder, he will be asked for. Otherwise, the dafault folder is the one containing the file.
              if(savebox.checkedState==true)
              {
              var extractfolder = Folder.selectDialog ("Please choose a folder where to save extracted pages...");
              if(!extractfolder)
              {
              exit();
              }
              else
              {
              var saveextractfolder = String(extractfolder.fullName)+"/" +String(doc.name).replace (/\.indd/, "");
              }
              }
              else
              {
              var saveextractfolder = String(pageinfos()[5]);
              }
              var rem0 = pageinfos()[0]-1;
              var rem2 =  (pgStart.editValue-2);
            
              // Variables definition regarding to the choice of the user to separate or not the extracted pages.
            
              if(sepbox.checkedState==true)
              {
              var W = pgEnd.editValue-pgStart.editValue+1;
              var rem1 = pgStart.editValue;
              }
              else
              {
              var W = 1;
              var rem1 = pgEnd.editValue;
              }
            
              // Extraction loop
              for(w=0; w<W;w++)
              {
              if(sepbox.checkedState==true)
              {
              var exportdocname = "_Pg" +(pgStart.editValue+w) +".indd";
              }
              else
              {
              var exportdocname = "_Pg"+pgStart.editValue+"_to_Pg_"+pgEnd.editValue +".indd";
              }
              for(var i=rem0; i>=rem1+w;i--)
              {
              doc.pages[i].remove();
              }
              for(var i=rem2+w; i>=0;i--)
              {
              doc.pages[i].remove();
              }
              var exportdoc = doc.save(File(saveextractfolder + exportdocname));
              exportdoc.close(SaveOptions.no);
              if(sepbox.checkedState==true && w<(pgEnd.editValue-pgStart.editValue))
              {
              app.open(File(docfile));
              }
              }
            
              // If the user chose to remove the extracted pages from the original document, it will re open the first document then remove the unuseful pages.
              if(rembox.checkedState == true)
              {
              app.open(File(docfile));
              for(var i=pgEnd.editValue-1; i>=pgStart.editValue-1;i--)
              {
              doc.pages[i].remove();
              }
              app.activeDocument.close(SaveOptions.yes);
              }
              }
              }
            }
            

             

            ______________________________

             

            Another option here, post #11:

             

            How to move layers to separate pages

            • 3. Re: Splitting a multi page inDesign document into separate .indd files?
              mikeb41294032 Level 1

              Here's another one to try that works great!!Screen Shot 2018-05-19 at 5.37.08 PM.png

               

               

               

              #targetengine "session";

              var myDoc = app.activeDocument;

              var myPages = app.activeDocument.pages;

               

              // Create a list of paragraph styles

              myStyles = app.activeDocument.allParagraphStyles;

              var myarray = [];

              for (i = 0; i < myStyles.length; i++) {

                  myarray.push(get_path(myStyles[i], myStyles[i].name));

                  if (myStyles[i].parent.constructor.name == "ParagraphStyleGroup") myarray[i] += " [" + myStyles[i].parent.name + "]";

              }

               

              var w = new Window("palette", "Extract Single Page Files ");

              app.activate();

              w.alignChildren = "left";

               

              // Radio Group 1  ------------------------------------------------------

               

              var byStyle = w.add("group");

              byStyle.alignChildren = "left";

              byStyle.orientation = "column";

              byStyle.margins = [0, 10, 0, 0];

              var FontDropdownGroup = byStyle.add("group");

              FontDropdownGroup.add("statictext", undefined, "Paragraph Style: ");

              var FontDropdown = FontDropdownGroup.add("dropdownlist", undefined, myarray);

              FontDropdown.selection = 0;

               

              var grep_group = w.add("group");

              grep_group.alignChildren = "right";

              grep_group.margins = [0, 10, 0, 5];

              grep_group.add("statictext", undefined, "Show 'highlight' Text For File Naming:");

              var checkGrep = grep_group.add("button", undefined, "\u2713");

              checkGrep.addEventListener("click", function () {

                  check(checkGrep.text)

              });

               

              // Radio Group 2  ------------------------------------------------------

               

              var radio_group2 = w.add("group");

              var radioType = radio_group2.add("radiobutton", undefined, "Extract Pages Named By Page#");

               

              // Choose Folder  ------------------------------------------------------

              var line2 = w.add("panel", [0, 0, 350, 2]);

              line2.alignment = 'center';

               

              var folder_group = w.add('group');

              folder_group.add("statictext", undefined, "Output Folder: ");

              var outfolder = folder_group.add('edittext {characters: 25}');

              var pick_button = folder_group.add('iconbutton', undefined, folder_icon(), {

                  style: 'toolbutton'

              });

               

              pick_button.onClick = function () {

                  var f = Folder(outfolder.text).selectDlg('Choose a folder')

                  if (f != null) {

                      outfolder.text = f.fullName + '/';

              }

              }

              outfolder.onDeactivate = function () {

                  if (outfolder.text !== "" && !Folder(outfolder.text).exists) {

                      outfolder.text = folder.text += " does not exist";

                      w.layout.layout();

                      outfolder.active = true;

                  } else

                  if (outfolder.text !== "" && outfolder.text.slice(-1) !== "/") outfolder.text += "/";

              }

               

              // Extact Button  ------------------------------------------------------

              var line = w.add("panel", [0, 0, 0, 0]);

              line.alignment = 'center';

              var buttonExtract = w.add("button", undefined, "Extract Pages");

              buttonExtract.addEventListener("click", function () {

                  extract(checkGrep.text)

              });

              buttonExtract.alignment = 'right';

               

               

              // Radio Event Listeners ------------------------------------------------------

                   radio_group2.children[0].value = false;

               

                  radio_group2.addEventListener("click", function () {

                  for (var i = 0; i < radio_group2.children.length; i++)

                      radio_group2.children[i].value = true;

              });

               

              function check(p) {

                  app.activate();

               

                  var FontName = String(FontDropdown.selection);

                  var doc = app.activeDocument;

                  try {

                      highlight_grep(doc, FontName)

                  } catch (e) {

                      alert("Please Select the Applied Paragraph Style.")

                  }

                  app.documents[0].layoutWindows[0].screenMode = ScreenModeOptions.previewOff;

               

                  function highlight_grep(doc, FontName) {

                      var highlightCondition = check_condition(doc, 'HightlightGrep');

                      app.findGrepPreferences = app.changeGrepPreferences = null;

                      if (FontName != "[No Paragraph Style]") {

                          app.findGrepPreferences.appliedParagraphStyle = String(FontName);

                      }

                      app.changeGrepPreferences.appliedConditions = [highlightCondition];

               

                      doc.changeGrep();

                  }

               

                  function check_condition(doc, n) {

                     

                      // Delete condition if it exists

                      if (doc.conditions.item(n) !== null)

                          doc.conditions.item(n).remove();

                      doc.conditions.add({

                          name: n,

                          indicatorColor: [225, 225, 255],

                          indicatorMethod: ConditionIndicatorMethod.useHighlight

                      });

                      return doc.conditions.item(n)

                  }

              }

               

              function clear(p) {

                  app.activate();

                  var doc = app.activeDocument;

                  if (doc.conditions.item("HightlightGrep") !== null) {

                      doc.conditions.item("HightlightGrep").remove();

                  }

              }

               

              // EXTRACTING THE PAGES ------------------------------------------------------

               

              function extract() {

                  clear();

                  var myPages = app.activeDocument.pages;

                      with(myDoc.metadataPreferences) {

                  }

                  var FontName = String(FontDropdown.selection);

                 

              var myFilePath = outfolder.text;

              if (myFilePath  !== ""){

               

              }else{

                  alert ("Please Select a Folder!")

              return;

               

              }

               

                // Radio2 ------------------------------------------------------       

               

                  if (radioType.value === true) {

                  for (i = 0; i < myPages.length; i++){   

               

               

                 var myFolder = (File(String(myFilePath)));

                 myDoc.saveACopy(File(myFolder+"/Page "+myPages[i].name+".indd"));

                 newDoc = app.open(File(myFolder+"/Page "+myPages[i].name+".indd"), false);

                 myDoc.pages[i].duplicate(LocationOptions.AT_END, newDoc.pages[-1]);

                 newDoc.pages.itemByRange(newDoc.pages[0], newDoc.pages[-2]).remove();

                 newDoc.close(SaveOptions.YES);

                 }

              }

               

                 // StyleOption ------------------------------------------------------

                 

                          if (radioType.value === false) {

                          try {

                         app.findGrepPreferences.appliedParagraphStyle = FontName;

                          if (FontName == "[No Paragraph Style]")

                          } catch (e) {

                           alert("Select a Paragraph Style & Try Again!");

                           return;}

                       }

                

                      if (radioType.value === false) {          

                      for (i = 0; i < myPages.length; i++) {

                          var text = [];

                          var currentPage = myPages[i];

                          for (t = 0; t < currentPage.textFrames.length; t++) {

                              var currentFrame = currentPage.textFrames[t];

                              app.findGrepPreferences = null;

                              app.changeGrepPreferences = null;

                              app.findChangeGrepOptions.includeFootnotes = false;

                              app.findChangeGrepOptions.includeHiddenLayers = false;

                              app.findChangeGrepOptions.includeLockedLayersForFind = true;

                              app.findChangeGrepOptions.includeLockedStoriesForFind = true;

                              app.findChangeGrepOptions.includeMasterPages = true;

                             

                      

                      

                                app.findGrepPreferences.appliedParagraphStyle = FontName;

                              var finds = currentFrame.findGrep();

                              if (finds.length > 0) {

               

               

                                  for (var f = 0; f < finds.length; f++) {

                                      text.push(finds[f].contents);

                                  }

                              }

                          }

                          var pageName = String(text.join(', '));

                         

                          if (pageName === "") {

                              var pageName = String("NameError" + i);

                          }

               

                          var myFolder = (File(String(myFilePath))); // Create a new file path

                          myDoc.saveACopy(File(myFolder + "/" + pageName +".indd"));

                          newDoc = app.open(File(myFolder + "/" + pageName +".indd"), false);

                          myDoc.pages[i].duplicate(LocationOptions.AT_END, newDoc.pages[-1]);

                          newDoc.pages.itemByRange(newDoc.pages[0], newDoc.pages[-2]).remove();

                          newDoc.close(SaveOptions.YES);

                      }

               

                      app.findGrepPreferences = app.changeGrepPreferences = null;

               

              }

               

              alert("Done Extracting Pages!");

              w.close();

              }

               

               

              function get_path(style, style_name) {

                  while (style.parent.constructor.name != 'Document')

                      return get_path(style.parent, style.parent.name + ' > ' + style_name);

                  return style_name;

              }

               

               

              function folder_icon() {

                  return "\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x16\x00\x00\x00\x12\b\x06\x00\x00\x00_ %.-\x00\x00\x00\tpHYs\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\u009A\u009C\x18\x00\x00\x00\ x04gAMA\x00\x00\u00B1\u008E|\u00FBQ\u0093\x00\x00\x00 cHRM\x00\x00z%\x00\x00\u0080\u0083\x00\x00\u00F9\u00FF\x00\x00\u0080\u00E9\x00\x00u0\x00\ x00\u00EA`\x00\x00:\u0098\x00\x00\x17o\u0092_\u00C5F\x00\x00\x02\u00DEIDATx\u00DAb\u00FC\u 00FF\u00FF?\x03-\x00@\x0011\u00D0\b\x00\x04\x10\u00CD\f\x06\b \x16\x18CFR\x12L\u00CF*\u0092e\u00FE\u00F7\u009F!\u008C\u0097\u008By\x19\u0088\u00FF\u00F 7\u00EF\x7F\u0086\u00CF\u00DF\u00FE\u00C6dOz\u00B2\x1C\u00C8\u00FD\x0F\u00C5\x04\x01@\x00\ u00A1\u00B8\x18f(##C\u00AD\u009Ak9\u0083\u008E_\x17\u0083i\u00D4<\x06\x16f\u00C6\u009A\t\u 00D9\u00D21@%\u00CC@\u00CCH\u008C\u00C1\x00\x01\u00C4\b\u008B<\u0090\u008Bg\x14\u00CAF212, \u00D3q\u00CDb\u00E0\x16Rf`\u00E3\x14f`\u00E5\x14d\u00F8\u00FF\u00E7'\u00C3\u00FE\u00D9a\x 18\u009A\u00FF\u00FE\u00FB\u009Fq\u00F3\u00F1\u00CF%\x13\u00D6\u00BE\u00FE\u0086\u00EE\x13 \u0080\x00bA\u00B6\x04d\u00A8\u00A1_\x15\u00D8@\u0098\u00A1\u00AC\u00EC\u00FC\f\u00CC<\\\f ^\u00A5\u00A7P\f\u00FD\u00F6\u00EE.\u00C3\u00DD\x03\x1D3\u00BE\u00FF<\u00FF\f\u00C8\u00DD\ x01\u00C4\x7F\u0090\r\x07\b \x14\u0083A\x04\u00CCP6\x0E!\u0086\u00A3s\x03\x18XY\x19\x19\u00FE\x01\u00C3\x07\x14\u00D6 \x7F\u00A1\u00F4\u009F\u00BF\f`\fb\x03}\u00BC\u00A9+U\u0092\u00E1\u00F9\u009B\u00BF\u00BA\ u00FD\u00EB_]\u0083\u00C5\x03@\x00\u00B1\u00A0\u00877\u00CC\u00A5\u00F7\x0F\u00F72\u00C8\x 1B\x052p\n(\u0080\u00A5\u00FE\u00FD\u00F9\u00C5\u00F0\u00F7\u00F7o\u0086?\u00BF\x7F1\u00FC \u00F9\x05\u00A1\u00FF\u00FE\u00F9\r\u00C6\u009F\u009E_\x00\u00C6\u00C3\u00FDI@\u0085^@\u0 0FC\x1B\x14J\x00\x01\u00C4\u0084\u00EEb\u0090\u00A1\u00BF>\u00BFd\u00F8\u00FC\u00EA:\x03\u 00A7\u00A0\"\u00C3\u00BF\u00BF\u00BF\x19\u00FE\u00FF\u00FD\x034\u00F8\x0F\u00D8\u0090\x7F\ u00BFAl \u00FD\u00EF/P\u00EE\x0FX\u00FE\u00C0\u00B1+\f\u008F^\u00FD<\b\u00D4\u00CE\x01\u008B`\u00 80\x00\u00C2\b\n\x0E\x1EI\u0086\u009B\u00DB\u00CA\x19\u0084\u0094\u00EC\u0081\u0081\u00CE\ u00CA\u00C0\u00C4\x04\u00F4\u00FE\u00AF_`\u0083A\u0086\u0082]\u00F9\x17j8\u0090\u00FE\u00F 1\u00E9)\u00C3\u00D6\x13/\x19\u00EE\u00BFa\u00D8\u00C2\u00CE\u00C6\u00CE\n5\u00F8\x0F@\x00 ad\u0090W7\u00B60\u00FC\u00FB\u00FF\u0087\u0081KX\x05\u00E8\u00D2\u00DF`\x03\u00FE\u0082]\ x0Bq\u00DD\u00BF\u00BF0\u0097\u00FE\x05\u0086\u00EF_\u0086\u00C3G\u008E1\u00DCy\u00FE}9\u0 0D0\u00D0O\u00C8I\x11 \u00800\f~xr\x06\u0083\u00A0\u00825\u00C3\u00FF\x7FPW\x01\r\x04Y\x00q\u00E9_ \u0086\x1A\x0E\u0094\u00FF\t\f\u00B2\u0095\u00FB\u009F20\u00B3p\u00CC\u0082\u00A6\n\x10\u 00FE\x07\u008A<\u0080\x00\u00C20\u0098\u009DO\u0082\u0081\u009DG\x02\x12\u00AE@\u00CD \u0083\u00C0^\x07bP\u00E4\u00FD\u0083\x1A\u00FE\x1F\u00E8\u00ABS'\u008F2\u00DC{\u00FE}\x1 D;;\u00C7\x0B\u00A0\u00D6\u009F@\u00FC\x0B\x14q \u0083\x01\x02\u0088\x05\u00C5P6&\u0086\u00F6i\u00DB\x18^\u00BE[\x0FNJ\u00BF\u00FF\u00FCc \x00&\x00\u0086\u00DF\u00BF!l`\x10\x03\u0093\u00D9\x7F0\u00FE\x0B\u00CCX\u00DF\x7F\u00FEe` e\u00E3\u009C\t5\u00F0'\u0092\u008B\x19\x00\x02\b9\u00E7\u0081\x02\u009E\x0B\u0088\u00F9\u 00A14+\x119\u00F7\x1F\u00D4\u00D0/P\u00FC\x1Dj8\x03@\x00!\u00BB\u00F8?T\u00F0'\u0096\u00CC C\u00C8\u00E0\u00EFP\u00FA\x1FL\x02 \u0080X\u00D0\x14\u00FD\u0086\u00DA\u00FC\u0083\u00C8\"\x15\u00E6\u0098\u00DF\u00C8\u00C1 \x00\x02\x00\x01\x06\x000\u00B2{\u009A\u00B3\x1C#o\x00\x00\x00\x00IEND\u00AEB`\u0082";

              }

              w.show();

              • 4. Re: Splitting a multi page inDesign document into separate .indd files?
                mayaelaine Level 1

                Thank you! This works perfectly. I really appreciate you taking the time to write out the comments as well. I'm going to read through it all and try and really get a good understanding.

                • 5. Re: Splitting a multi page inDesign document into separate .indd files?
                  Stephen_A_Marsh Adobe Community Professional

                  I can’t take any credit for commenting the script, like all helpful script authors do, Loïc Aigon documented the script.