2011-06-25 105 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'