2013-01-17 12 views
8

में प्रति उपयोगकर्ता या प्रति-दस्तावेज़ वरीयताओं को सहेजना मैं एक्स्टेंडस्क्रिप्ट का उपयोग कर जावास्क्रिप्ट में फ़ोटोशॉप स्क्रिप्ट पर काम कर रहा हूं। मेरी स्क्रिप्ट कुछ उपयोगकर्ता इनपुट की अनुमति देती है, और मैं इसे उपयोग के बीच सहेजना चाहता हूं। यही है, मैं किसी विशेष कुंजी के तहत एक साधारण स्ट्रिंग या न्यूमेरिक मान को सहेजने का एक तरीका ढूंढ रहा हूं ताकि मैं इसे स्क्रिप्ट के बाद के उपयोगों पर एक्सेस कर सकूं। सीधे शब्दों में कहें, मैं अपनी स्क्रिप्ट के लिए वरीयता को सहेजना चाहता हूं। मैं उसको कैसे करू?फ़ोटोशॉप स्क्रिप्ट

प्रति-दस्तावेज़ आधार पर कम से कम कुछ वरीयताओं को बचाने में भी सक्षम होना बेहतर होगा। क्या यह संभव है? यही है, क्या मैं दस्तावेज़ के साथ डेटा के मनमानी बिट स्टोर कर सकता हूं?

+0

https://indisnip.wordpress.com/2010/09/07/storing-custom -डेटा-इन-इंडिज़िग-फ़ाइल-एक्सएमपी/यहां भी लागू होता है? –

उत्तर

10

आप कस्टम विकल्प का उपयोग कर सकते डाल/प्राप्त वरीयता पैरामीटर भर फ़ोटोशॉप जारी रहती है को बचाने के लिए की शुरूआत:

const kMyFlag = app.stringIDToTypeID("myFlag"); 
const kMyNumber = app.stringIDToTypeID("myNumber"); 
const kMySettings = "mySettings"; 

function saveSettings() 
{ 
    var desc = new ActionDescriptor(); 
    desc.putBoolean(kMyFlag, true); 
    desc.putInteger(kMyNumber, 42); 

    // "true" means setting persists across Photoshop launches. 
    app.putCustomOptions(kMySettings, desc, true); 
} 

function getSettings() 
{ 
    var desc = app.getCustomOptions(kMySettings); 
    return [desc.getBoolean(kMyFlag), desc.getInteger(kMyNumber)]; 
} 
शायद
+0

उसी वर्णनकर्ता पर एकाधिक मान दिखाने के लिए उदाहरण संपादित किया गया। –

+0

बस किसी अन्य व्यक्ति को यह पता चलता है कि इंडेक्सइन में काम करने वाले समाधान की तलाश में: आप app.insertLabel और app.extractLabel का उपयोग अपनी वरीयताओं को स्टोर करने के लिए कर सकते हैं – ChristophK

4

आपके पास कुछ विकल्प हैं। आप एक पाठ फ़ाइल बना सकते हैं और File वस्तु का उपयोग कर इसे पते पर लिखें:

var prefs = new File("~/desktop/prefs.txt"); 
prefs.open("w"); // or "a" to append 
prefs.writeln("user:lenny;favorite_color:ff6600;likes:sunsets;"); 

... अगर आप अपनी प्राथमिकताओं स्क्रिप्ट खुद से बंधा चाहता था।

अगर आप चाहते हैं प्रति-दस्तावेज़ वरीयताओं आप इस तरह Document.info के प्रयोग पर फ़ाइल अपने काम के मेटाडाटा क्षेत्रों में से एक के लिए एक स्ट्रिंग लिख सकता है ('निर्देश' क्षेत्र का उपयोग लेकिन आप किसी भी लिखने योग्य क्षेत्र इस्तेमाल कर सकते हैं):

var doc = app.activeDocument; 
doc.info.instructions = "user:lenny;favorite_color:ff6600;likes:sunsets;"; 
//alert(doc.info.instructions); // see, it works! 

वास्तव में स्ट्रिंग को प्रारूपित करने के तरीके के रूप में आप इसे एक साधारण कॉन्फ़िगरेशन फ़ाइल की तरह कर सकते हैं या यदि आपके पास जटिल उपयोगकर्ता प्राथमिकता ऑब्जेक्ट है, तो आप XML ऑब्जेक्ट का निर्माण और क्रमबद्ध करने के लिए ऑब्जेक्ट का उपयोग कर सकते हैं। जेएसओएन इसके लिए बहुत अच्छा होगा लेकिन दुर्भाग्यवश, एक्स्टेंस्क्रिप्ट में कोई JSON ऑब्जेक्ट नहीं है।

0

प्रति-दस्तावेज़ प्राथमिकताओं के लिए मैं एक्सएमपी मेटाडाटा का उपयोग करने का सुझाव देता हूं। आप यहां उदाहरण स्निपेट पा सकते हैं: http://forums.adobe.com/thread/790973। आप पॉल Riggott के लिंक में सुझाव दिया गया है कि आप अपना खुद का नामस्थान बनाने के लिए AdobeXMPScript लाइब्रेरी का लाभ उठा सकते हैं।

संबंधित मुद्दे