How to write text to a text file by Photoshop JavaScript?

前端 未结 5 692
隐瞒了意图╮
隐瞒了意图╮ 2021-02-07 17:50

I took a look at Photoshop CS5 Scripting Guide and Photoshop CS5 JavaScript Reference, but I couldn\'t find out a method to write text to a plain text file. Is there any way to

相关标签:
5条回答
  • 2021-02-07 18:05

    This works for me, saves text with the same name as original document, but with extension 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();
    }
    

    I don't know how it works, photoshop scripting is a huge mess, I just kept mixing together a few scripts that I found until it worked.

    Also, if anyone needs this, here is a script that also saves active document as png image:

    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);
    }
    
    0 讨论(0)
  • 2021-02-07 18:08

    I found the docs lacking but came up with this as a method to create and write to a new file in 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();
    
    0 讨论(0)
  • 2021-02-07 18:16

    File system access is documented in Adobe's JavaScript Tools Guide (PDF).

    Download the PDF file and check out the "File System Access" section.

    0 讨论(0)
  • 2021-02-07 18:19

    Here's what you need: It's pretty basic. It'll loop over the layers (no layersets!!) and save out the layer name and the layer bounds for each layer.

    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();
    }
    
    0 讨论(0)
  • 2021-02-07 18:20

    I have read the docs and combined best parts of psycho brm's and corrin_m's answer.
    MY ANSWER ALSO CHECKS FOR ERRORS.

    It is not necessary to delete file if it exists because opening with "w" will overwrite existing file it.

    /* =======================================================
     * 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 "";
    }
    

    This is how I am using the function in my scripts

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

    BTW I am keeping this in separate file called common-code.jsx and I can include it with following line (single line comments are intentional).

    // @include 'common-code.jsx'
    
    0 讨论(0)
提交回复
热议问题