• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Script Indesign - Lister liens images avec nom fichier, pos X, pos Y

New Here ,
Jan 08, 2025 Jan 08, 2025

Copy link to clipboard

Copied

Bonjour,

 

Dans le cadre d'un projet personnel, je chercher à réaliser un sommaire des images dans un livre de 200 pages (et 450/500 liens). J'aurai besoin d'éditer un fichier texte un liste des lien avec le nom de fichier, sa page, sa position X et sa position Y (afin de déduire l'ordonnancement).

 

J'ai fait quelques recherches (sur des scripts existants) au préalable mais en vain. Ne sachant pas écrire de script, j'ai interrogé ChatGpt. Cela marche plutôt mais valeurs de PosX et PosY semblent un peu étrange comparé à la réalité de la mise en page.

Est-ce que cela vous paraît cohérent ?

 

#target indesign

// Fonction pour convertir les points en millimètres
function pointsToMillimeters(points) {
    return points * 25.4 / 72;
}

// Fonction principale
function listImageLinks() {
    var doc = app.activeDocument; // Récupère le document actif
    var imageLinks = []; // Tableau pour stocker les informations des liens
    var pages = doc.pages; // Récupère toutes les pages du document
    
    // Parcourt toutes les pages du document
    for (var i = 0; i < pages.length; i++) {
        var page = pages[i];
        var pageItems = page.allPageItems; // Récupère tous les objets de la page
        
        // Parcourt tous les éléments de la page
        for (var j = 0; j < pageItems.length; j++) {
            var item = pageItems[j];
            
            // Vérifie si l'élément est une image (un graphique avec un lien)
            if (item instanceof Image && item.itemLink != null && item.itemLink.isValid) {
                var link = item.itemLink; // Récupère le lien de l'image
                var fileName = link.name; // Nom du fichier lié
                var filePath = link.filePath; // Chemin complet du fichier
                var pageNum = page.name; // Numéro de la page
                var xPos = pointsToMillimeters(item.geometricBounds[1]); // Position X (gauche) en mm
                var yPos = pointsToMillimeters(item.geometricBounds[0]); // Position Y (haut) en mm
                var layerIndex = pageItems.length - j; // Calculer l'ordre de positionnement (z-index)
                
                // Enregistre les informations de l'image
                imageLinks.push({
                    fileName: fileName,
                    filePath: filePath,
                    page: pageNum,
                    xPos: xPos,
                    yPos: yPos,
                    layerIndex: layerIndex // Ajoute l'ordre de positionnement
                });
            }
        }
    }

    // Si des liens d'images ont été trouvés
    if (imageLinks.length > 0) {
        // Création du nom du fichier avec horodatage
        var currentDate = new Date();
        var timestamp = currentDate.getFullYear() + "-" +
                        ("0" + (currentDate.getMonth() + 1)).slice(-2) + "-" +
                        ("0" + currentDate.getDate()).slice(-2) + "_" +
                        ("0" + currentDate.getHours()).slice(-2) + "-" +
                        ("0" + currentDate.getMinutes()).slice(-2) + "-" +
                        ("0" + currentDate.getSeconds()).slice(-2);
        var fileName = "Liens_Images_" + timestamp + ".txt";

        // Chemin du fichier sur le bureau
        var filePath = "~/Desktop/" + fileName;
        var file = new File(filePath);

        // Ouvre ou crée le fichier
        if (file.open("w")) {
            var output = "Nom du fichier | Chemin complet | Page | Position X (mm) | Position Y (mm) | Ordre de Positionnement\n";
            output += "---------------------------------------------------------------\n";
            
            // Écrit les résultats dans le fichier
            for (var k = 0; k < imageLinks.length; k++) {
                var linkInfo = imageLinks[k];
                output += linkInfo.fileName + " | " + linkInfo.filePath + " | " + linkInfo.page + " | " + linkInfo.xPos.toFixed(2) + " | " + linkInfo.yPos.toFixed(2) + " | " + linkInfo.layerIndex + "\n";
            }

            // Enregistre le fichier et le ferme
            file.write(output);
            file.close();

            alert("Les informations des liens d'images ont été enregistrées dans le fichier : " + fileName);
        } else {
            alert("Impossible d'ouvrir ou de créer le fichier.");
        }
    } else {
        alert("Aucun lien d'image trouvé dans ce document.");
    }
}

// Appelle la fonction principale
listImageLinks();

 

 

TOPICS
Scripting

Views

76

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 08, 2025 Jan 08, 2025

Copy link to clipboard

Copied

Your script assumes that your document's meaurement units are points and converts that value to millimeters. But if your document's units are millimeters, then the x and y positions are reported wrong.

 

If that's the problem, there are three different ways to fix this:

1. Set your document's measurement units to points

2. Add this line below the line var doc = app.activeDocument:

    app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;

3. Ideally, change these two lines:

 

var xPos = pointsToMillimeters(item.geometricBounds[1]); // Position X (gauche) en mm
var yPos = pointsToMillimeters(item.geometricBounds[0]); // Position Y (haut) en mm

 

as follows:

 

var xPos = item.geometricBounds[1]; // Position X (gauche) en mm
var yPos = item.geometricBounds[0]; // Position Y (haut) en mm

 

 P.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 10, 2025 Jan 10, 2025

Copy link to clipboard

Copied

LATEST

Thanks you for your reply, Peter. I will watch.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines