Skip to main content
Mario Fritsche
Legend
April 8, 2025
Question

Delete empty pages

  • April 8, 2025
  • 1 reply
  • 154 views

Hello,
I have an InDesign document with several pages. Now a script should always save 2 pages in a new document (page 1-2, 3-4, 5-6 etc.).
In InDesign 2025 (20.2.) everything works perfectly, but unfortunately not in 2024 (19.5.3). There the empty pages are not deleted correctly. The function removeEmptyPages is probably not working properly.
Can anyone help? I have attached a sample file.

if (app.documents.length > 0) {
  var doc = app.documents[0];
} else {
  alert("Kein Dokument geöffnet!");
}

extractPagesInPairs();

function extractPagesInPairs() {
  var doc = app.activeDocument;

  if (!doc.saved) {
    alert(
      "Bitte speichere das Dokument zuerst, bevor das Skript ausgeführt wird."
    );
    return;
  }

  var docInfo = pageinfos();
  var totalPages = docInfo[0];
  var docPath = docInfo[6];

  if (totalPages < 2) {
    alert("Das Dokument enthält weniger als zwei Seiten.");
    return;
  }

  var exportFolder = Folder.selectDialog("Wählen Sie einen Zielordner");
  if (!exportFolder) {
    alert("Kein Zielordner ausgewählt.");
    return;
  }

  for (var i = 0; i < totalPages; i += 2) {
    var startPage = i + 1;
    var endPage = Math.min(i + 2, totalPages);

    var newDoc = app.documents.add();
    newDoc.documentPreferences.createPrimaryTextFrame = false;

    newDoc.documentPreferences.pageWidth = doc.documentPreferences.pageWidth;
    newDoc.documentPreferences.pageHeight = doc.documentPreferences.pageHeight;

    var orientation =
      doc.documentPreferences.pageHeight > doc.documentPreferences.pageWidth
        ? PageOrientation.PORTRAIT
        : PageOrientation.LANDSCAPE;
    newDoc.documentPreferences.pageOrientation = orientation;

    for (var j = i; j < i + 2 && j < totalPages; j++) {
      var sourcePage = doc.pages[j];
      var targetPage = newDoc.pages.add();

      sourcePage.duplicate(LocationOptions.AFTER, targetPage);
    }

    removeEmptyPages(newDoc);

    var newFileName = getFileNameFromTextField(newDoc);
    if (!newFileName) {
      newFileName = "Dokument_" + startPage + "-" + endPage;
    }

    newFileName = ensureUniqueFileName(exportFolder.fsName, newFileName);

    var exportName = newFileName + ".indd";
    var saveFile = new File(exportFolder.fsName + "/" + exportName);

    try {
      newDoc.save(saveFile);
      newDoc.close(SaveOptions.YES);
    } catch (e) {
      alert("Fehler beim Speichern des Dokuments:\n" + e);
      return;
    }
  }

  alert("Alle Seiten erfolgreich gespeichert!");
}

function getFileNameFromTextField(doc) {
  var fileName = "";
  try {
    var textFrames = doc.textFrames;

    for (var i = 0; i < textFrames.length; i++) {
      var frame = textFrames[i];

      for (var j = 0; j < frame.paragraphs.length; j++) {
        var paragraph = frame.paragraphs[j];

        if (paragraph.appliedParagraphStyle.name == "dateiname") {
          fileName = removeSpaces(paragraph.contents);

          break;
        }
      }

      if (fileName !== "") {
        break;
      }
    }
  } catch (e) {
    alert("Fehler beim Abrufen des Dateinamens: " + e);
  }

  return fileName;
}

function isPageEmpty(page) {
  var pageObjects = page.allPageItems;
  return pageObjects.length === 0;
}

function pageinfos() {
  var doc = app.activeDocument;
  var pg = doc.pages;
  var pglg = pg.length;
  var pFirst = Number(pg[0].name);
  var pLast = Number(pg[pglg - 1].name);
  var pgHeight = doc.documentPreferences.pageHeight;
  var pgWidth = doc.documentPreferences.pageWidth;
  var docname = String(doc.fullName).replace(/\.indd$/, "");
  var docpath = doc.filePath;
  var docfullname = doc.fullName;

  return [
    pglg,
    pFirst,
    pLast,
    pgHeight,
    pgWidth,
    docname,
    docpath,
    docfullname,
  ];
}

function duplicateMasterPages(doc, newDoc) {
  try {
    for (var i = 0; i < doc.masterSpreads.length; i++) {
      var masterSpread = doc.masterSpreads[i];

      masterSpread.duplicate(LocationOptions.AFTER, newDoc.masterSpreads[-1]);
    }
  } catch (e) {
    alert("Fehler beim Duplizieren der Musterseiten: " + e);
  }
}

function removeEmptyPages(doc) {
  for (var i = doc.pages.length - 1; i >= 0; i--) {
    var page = doc.pages[i];
    if (page.pageItems.length == 0) {
      page.remove();
    }
  }
}

function removeSpaces(str) {
  return str.replace(/^\s+|\s+$/g, "");
}

function getFileNameFromTextField(doc) {
  var fileName = "";
  var textFrames = doc.textFrames;
  for (var i = 0; i < textFrames.length; i++) {
    var textFrame = textFrames[i];
    var paragraphs = textFrame.paragraphs;
    for (var j = 0; j < paragraphs.length; j++) {
      var paragraph = paragraphs[j];
      if (paragraph.appliedParagraphStyle.name === "dateiname") {
        fileName = paragraph.contents.replace(/^\s+|\s+$/g, "");
        break;
      }
    }
    if (fileName) break;
  }
  return fileName || "";
}

function ensureUniqueFileName(path, baseName) {
  var i = 1;
  var file = new File(path + "/" + baseName + ".indd");
  while (file.exists) {
    file = new File(path + "/" + baseName + "_" + i + ".indd");
    i++;
  }

  return file.name.replace(".indd", "");
}