Skip to content

Michael Han

My feedback

1 result found

  1. 13 votes

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)

    We’ll send you updates on this idea

    How important is this to you?

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    An error occurred while saving the comment
    Michael Han commented  · 

    Here you go:

    function detectAllUnresolvedPlaceholders() {
    if (app.documents.length === 0) {
    alert("No document is open. Please open a document and try again.");
    return;
    }

    var doc = app.activeDocument;
    var unresolvedPlaceholders = [];

    // Helper function to check if a value is in an array
    function arrayContains(arr, value) {
    for (var i = 0; i < arr.length; i++) {
    if (arr[i] === value) {
    return true;
    }
    }
    return false;
    }

    try {
    // Ensure there is a data merge source
    if (!doc.dataMergeProperties || doc.dataMergeProperties.dataMergeFields.length === 0) {
    alert("No data merge fields found in the document.");
    return;
    }

    // Collect valid field names into a regular JavaScript array
    var mergeFields = doc.dataMergeProperties.dataMergeFields;
    var validFieldNames = [];
    for (var i = 0; i < mergeFields.length; i++) {
    validFieldNames.push(mergeFields[i].fieldName);
    }

    // Iterate through all text frames and search for placeholders
    var allTextFrames = doc.textFrames;
    for (var j = 0; j < allTextFrames.length; j++) {
    var frame = allTextFrames[j];

    // Check for hidden or overset frames
    if (!frame.visible || frame.overflows) {
    unresolvedPlaceholders.push(
    "Text frame at index " + j + " is hidden or overset."
    );
    continue;
    }

    // Search for placeholders in the text
    var placeholderPattern = /<<([^>>]+)>>/g;
    var textContent = frame.contents;
    var match;

    while ((match = placeholderPattern.exec(textContent)) !== null) {
    var placeholder = match[1];

    // Safely handle placeholder
    if (placeholder === null || placeholder === undefined) {
    unresolvedPlaceholders.push(
    "Invalid placeholder found in text frame index " + j
    );
    } else {
    // Convert to string and remove leading/trailing whitespace
    placeholder = placeholder.toString().replace(/^\s+|\s+$/g, "");

    // Check if the placeholder matches a valid field name
    if (!arrayContains(validFieldNames, placeholder)) {
    unresolvedPlaceholders.push(
    "Unresolved placeholder: <<" + placeholder + ">> in text frame index " + j
    );
    }
    }
    }
    }

    // Display results
    if (unresolvedPlaceholders.length > 0) {
    var message = "Unresolved Placeholders Detected:\n\n" + unresolvedPlaceholders.join("\n");
    alert(message);
    } else {
    alert("All placeholders are resolved successfully!");
    }
    } catch (e) {
    alert("An error occurred: " + e.message);
    }
    }

    // Run the function
    detectAllUnresolvedPlaceholders();

Feedback and Knowledge Base