[FIXED] GetDocumentByName in Photoshop

Ausgabe

Während es möglich ist, eine Ebene, einen Verlaufsstatus oder einen Ebenensatz mit getByName zu erfassen, scheint es keine für Dokumente zu geben, wenn zwei oder mehr geöffnete Photoshop-Dateien verwendet werden.

var srcDoc = app.Documents.getByName("Gwen_Stefani"); // doesn't work

Ist das richtig?

Die Problemumgehung besteht darin, das Dokumentenarray zu durchlaufen, bis eine Zeichenfolge mit dem erforderlichen Dokument übereinstimmt:

getDocumentByName("Gwen_Stefani");


function getDocumentByName(docname)
{
  for (var i = 0; i < documents.length; i++)
  {
    var someDoc = docname.replace(/\..+$/, "");
    if (someDoc.toLowerCase() == docname.toLowerCase())
    {
      alert(someDoc);
      app.activeDocument = documents[i];
    }
  }
}

Lösung

Wenn Sie sich nicht sicher sind, überprüfen Sie einfach die Skriptreferenz (S. 104):

Geben Sie hier die Bildbeschreibung ein

var srcDoc = documents.getByName("Gwen_Stefani");
activeDocument = srcDoc;

Sie können Dokumente auch nach ID aktivieren, was zuverlässiger ist:

// selects a doc with provided ID
function selectByID(id) {
    var desc = new ActionDescriptor();
    var ref = new ActionReference();
    ref.putIdentifier(charIDToTypeID("Dcmn"), id);
    desc.putReference(charIDToTypeID("null"), ref);
    executeAction(charIDToTypeID("slct"), desc, DialogModes.NO);
}

// gets an ID for the active doc
function getDocID() {
    var ref = new ActionReference();
    ref.putProperty(stringIDToTypeID("property"), stringIDToTypeID("documentID"));
    ref.putEnumerated(charIDToTypeID("Dcmn"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
    var desc = executeActionGet(ref);
    return desc.getInteger(stringIDToTypeID("documentID"));
}


Beantwortet von –
Sergey Kritskiy


Antwort geprüft von –
Terry (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like