La raison pour laquelle vous obtenez une erreur est dupObj
n'est jamais définie. Je pense que vous voulez dire utiliser docRef
, la référence à votre document source dans la ligne 1. Cela semble fonctionner bien maintenant:
var docRef = app.activeDocument;
app.activeDocument.selection.selectAll();
var calcWidth = app.activeDocument.selection.bounds[2] -app.activeDocument.selection.bounds[0];
var calcHeight = app.activeDocument.selection.bounds[3] - app.activeDocument.selection.bounds[1];
var docResolution = app.activeDocument.resolution;
var document = app.documents.add(calcWidth, calcHeight, docResolution);
app.activeDocument = docRef;
try {
docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE); // ** changed to docRef **
}
catch(e) {
alert(e)
}
Cela étant dit qu'il pourrait y avoir quelques bugs cachés là-dedans que vous devriez regarder. Dans cette ligne:
docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE);
i
est jamais définie, et apparemment par défaut à 0 sans lancer une erreur. Le résultat est que vous ne dupliquerez que la première couche du tableau artLayers
.
De même, puisque vous sélectionnez le document entier en utilisant app.activeDocument.selection.selectAll();
, il n'est pas nécessaire de calculer la taille de la sélection. Ce sera toujours la même taille que le document original. Vous pouvez simplement utiliser docRef.width
et docRef.height
comme largeur et hauteur pour le nouveau document. En outre, lorsque vous dupliquez un calque, il copiera le calque entier indépendamment de la sélection, pour autant que je sache.
Si vous voulez juste faire un nouveau document de la même taille que la couche que vous dupliquez essayez d'utiliser artLayers[i].bounds
au lieu de selection.bounds