C#和ExtendScript用于批处理.incx文件

时间:2016-08-09 17:25:45

标签: c# adobe extendscript jsx

我有大量的.incx文本文档聚集到他们自己的子文件夹中,我需要迭代并转换为纯文本作为我创建的C#winform应用程序的一部分。我有最新版本的InCopy和ExtendScript Toolkit,以及一个非常适合安静地快速创建我的纯文本文件的.jsx脚本。

我的问题/问题是,如何在正在运行的第三方应用程序中的C#类中最好地启动它,并发送相关信息,没有太多指导。当我运行.jsx脚本时,我需要从我的应用程序发送一个目标文件夹,它可以找到.incx文件。

目标文件夹将是动态的,具体取决于我的应用程序中的其他先前操作。

提前致谢。我在Adobe的论坛上找到了一些模糊的提示,涉及额外的.vbs文件和/或外部临时文件来保存参数,但是它们都过时了,所以我想我会问,看看是否有人知道现代方法。如果有任何不清楚的地方,我会立即回复澄清。

1 个答案:

答案 0 :(得分:0)

通过更多的谷歌搜索和我自己的反复试验,我找到了答案。

我能找到的最好的方法是在VBS中执行所有的InCopy脚本,然后使用Process实例使用cscript发送我的arg(s)。

示例C#:

Process myScriptProc = new Process();
myScriptProc.StartInfo.FileName = @"cscript";
myScriptProc.StartInfo.WorkingDirectory = rootDir + "\\";       // rootDir being the path where my vbs lives
myScriptProc.StartInfo.Arguments = "MyScript.vbs " + filesPath; // filesPath is the arg sent to the script
myScriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myScriptProc.Start();
myScriptProc.WaitForExit();
myScriptProc.Close();

MyScript.vbs

main
Function main() 
    Set myInCopy = CreateObject("InCopy.Application.CC.2015")
    Set obj = CreateObject("Scripting.FileSystemObject")
    myInCopy.ScriptPreferences.UserInteractionLevel = 1699640946    
    myFormat = 1952412773
    myExtension = ".txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    objStartFolder = WScript.Arguments(0)   
    Set objFolder = objFSO.GetFolder(objStartFolder)
    Set colFiles = objFolder.Files
    For Each x In colFiles
    If LCase(objFSO.GetExtensionName(x.name)) = "incx" Then
            thisDoc = x
            Set myDoc = myInCopy.open(thisDoc)
            Set myStory = myInCopy.ActiveDocument.Stories.Item(1)
            parts = split(x.Name, ".")
            myFilePath = objStartFolder & "/" & parts(0) & myExtension  
            myStory.Export myFormat, myFilePath
            myDoc.close()
            obj.DeleteFile(thisDoc)
        End If
    Next
    myInCopy.ScriptPreferences.UserInteractionLevel = 1699311169
End Function

我在VBScript中重写了我的JavaScript文件,因为从吹响Adobe论坛的风滚草来看,我从来没有得到任何答案,为什么他们调用DoJavaScriptFile的文档示例会产生对象丢失方法错误。

在VB中重新编写脚本后遇到的最大障碍是,如果在外部运行脚本,则必须使用特定于Adobe的超级秘密枚举十进制值。如果你看看MyScript.vbs,你会看到一些看起来像随机10位数值的实例。那些来自这里:

http://jongware.mit.edu/idcs5js_html_3.0.3i/idcs5js/index_Enum%20Suite.html

祝福创建该资源的人,因为我无法在Adobe的任何文档中找到这些信息来挽救我的生命。

TL; DR:如果您尝试自动使用在Adobe应用程序外部运行的进程和脚本,请在VBScript中执行所有操作,并注意神秘的十进制枚举。

无用的脚注: 这里的MyScript.vbs从传入的目录中读取所有* .incx文件,以普通.txt(具有相同的文件名)导出到同一个目录中,并删除原始文件。