2011-06-25 148 views

回答

7

文件系統訪問記錄在Adobe的JavaScript Tools Guide (PDF)中。

下載PDF文件並查看「文件系統訪問」部分。

+0

謝謝!我找到的文件/應用程序/實用程序/ Adob​​e工具-CS5.localized/ExtendScript工具包CS5/SDK – torus

+3

源代碼是價值數千單證的。 –

14

這個工作對我來說,節省了使用相同的名稱作爲原始文檔中的文本,但其擴展txt

function saveTxt(txt) 
{ 
    var Name = app.activeDocument.name.replace(/\.[^\.]+$/, ''); 
    var Ext = decodeURI(app.activeDocument.name).replace(/^.*\./,''); 
    if (Ext.toLowerCase() != 'psd') 
     return; 

    var Path = app.activeDocument.path; 
    var saveFile = File(Path + "/" + Name +".txt"); 

    if(saveFile.exists) 
     saveFile.remove(); 

    saveFile.encoding = "UTF8"; 
    saveFile.open("e", "TEXT", "????"); 
    saveFile.writeln(txt); 
    saveFile.close(); 
} 

我不知道它是如何工作的,Photoshop的腳本是一個巨大的混亂,我只是不停將我發現的幾個腳本混合在一起,直到它工作。

而且,如果有人需要這個,這裏是一個腳本,也節省了活動文檔爲png圖像:

function savePng() 
{ 
    var Name = app.activeDocument.name.replace(/\.[^\.]+$/, ''); 
    var Ext = decodeURI(app.activeDocument.name).replace(/^.*\./,''); 
    if (Ext.toLowerCase() != 'psd') 
     return; 

    var Path = app.activeDocument.path; 
    var saveFile = File(Path + "/" + Name +".png"); 

    if(saveFile.exists) 
     saveFile.remove(); 

    var o = new ExportOptionsSaveForWeb(); 
     o.format = SaveDocumentType.PNG; 
     o.PNG8 = false; 
     o.transparency = true; 
     o.interlaced = false; 
     o.includeProfile = false; 
    activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, o); 
} 
4

我發現,缺乏文檔,但與此想出了一個方法來創建並寫入在CS6新文件:

var s = "My string data here"; 
var file = new File(); 
var fileNew = file.saveDlg("Save new file"); 
fileNew.open("w"); 
fileNew.write(s); 
fileNew.close(); 
2

這裏有您需要什麼: 這是很基本的。它會遍歷圖層(不包括layersets !!)並保存每個圖層的圖層名稱和圖層邊界。

app.preferences.rulerUnits = Units.PIXELS; 
var srcDoc = app.activeDocument; 
var numOfLayers = srcDoc.layers.length; 
var results = ""; 
var fileName = srcDoc.name; 
var docName = fileName.substring(0,fileName.length -4) 
var theFile = srcDoc.path + "/" + docName + ".txt"; 

for (var i = 0; i < numOfLayers ; i++) 
{ 
    var theLayer = srcDoc.layers[i]; 
    var lb = getLayerBounds(theLayer).toString(); 
    results += theLayer.name + ": " + lb + "\n"; 
} 

writeTextFile(theFile, results) 
alert(results); 

function getLayerBounds(alayer) 
{ 
    var x1 = parseFloat(alayer.bounds[0]) 
    var y1 = parseFloat(alayer.bounds[1]) 
    var x2 = parseFloat(alayer.bounds[2]) 
    var y2 = parseFloat(alayer.bounds[3]) 
    return [x1,y1,x2,y2] 
} 

function writeTextFile(afilename, output) 
{ 
    var txtFile = new File(afilename); 
    txtFile.open("w"); // 
    txtFile.writeln(output); 
    txtFile.close(); 
} 
3

我已經閱讀了文檔,並結合了精神科brm和corrin_m的答案的最佳部分。
我的回答也檢查錯誤。

如果文件存在,則不需要刪除文件,因爲用「w」打開會覆蓋現有文件。

/* ======================================================= 
* Saves file as text. Overwrites old file if exists. 
* Returns empty string if no errors, otherwise error message. 
* =======================================================*/ 
function saveAsTextFile(filePath, content) { 
    var saveFile = new File(filePath); 

    saveFile.encoding = "UTF8"; 
    saveFile.open("w"); 
    if (saveFile.error != "") 
     return saveFile.error; 

    saveFile.write(content); 
    if (saveFile.error != "") 
     return saveFile.error; 

    saveFile.close(); 
    if (saveFile.error != "") 
     return saveFile.error; 

    return ""; 
} 

這是我如何用我的腳本功能

error = saveAsTextFile(filePath, content); 
if (error === "") { 
    alert(filePath + " saved OK."); 
} 
else { 
    alert("Error saving " + filePath + "\n" + error); 
} 

BTW我保持這個單獨的文件中被稱爲黎民-code.jsx,我可以用下面的線(單線包括它意見是故意的)。

// @include 'common-code.jsx'