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

本文关键字:处理 incx 文件 ExtendScript 用于 | 更新日期: 2023-09-27 18:01:47

我有大量。incx文本文档聚集到它们自己的子文件夹中,我需要迭代并将其转换为明文,作为我创建的c# winform应用程序的一部分。我有最新版本的InCopy和ExtendScript工具包,以及一个.jsx脚本,它可以安静快速地创建我的明文文件。

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

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

我在Adobe的论坛上发现了一些关于解决方案的模糊提示,包括额外的。vbs文件和/或外部临时文件来保存参数,但它们都很过时,所以我想我应该问问是否有人知道一个现代的方法。如果有什么不清楚的地方,我会马上回复澄清。

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

通过更多的谷歌搜索和我自己的尝试和错误,我找到了我的答案。

我能找到的最好的方法是在VBS中执行所有的InCopy脚本,然后使用Process实例发送我的参数(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(具有相同的文件名,到相同的目录),并删除原始的。