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

C# and ExtendScript for batch processing of .incx files

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

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

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

我在 Adob​​e 的论坛上发现了一些模糊的解决方案提示,涉及额外的 .vbs 文件 and/or 外部临时文件来保存参数,但它们都已经过时了,所以我想我会问看看是否有人知道现代方法。有什么不明白的,我会第一时间回复说明。

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

我能找到的最好方法是在 VBS 中完成所有 InCopy 脚本,然后使用 Process 实例通过 cscript 发送我的 arg。

示例 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 文件,因为从 Adob​​e 论坛上的风滚草来看,我永远不会得到任何答案,为什么他们的文档示例调用 DoJavaScript文件生成对象缺少方法错误。

我 运行 在 VB 中重做我的脚本后遇到的最大障碍是,如果你 运行外部的脚本。如果您查看 MyScript.vbs,您会看到一些看起来像 运行dom 10 位数字值的实例。这些来自这里:

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

祝福创建该资源的人,因为我在 Adob​​e 的任何文档中都找不到该信息来挽救我的生命。

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

没用的脚注: MyScript.vbs 此处从传入的目录中读取所有 *.incx 文件,导出为普通 .txt(具有相同的文件名,进入相同的目录),并删除原始文件。