我有大量的.incx文本文档聚集到他们自己的子文件夹中,我需要迭代并转换为纯文本作为我创建的C#winform应用程序的一部分。我有最新版本的InCopy和ExtendScript Toolkit,以及一个非常适合安静地快速创建我的纯文本文件的.jsx脚本。
我的问题/问题是,如何在正在运行的第三方应用程序中的C#类中最好地启动它,并发送相关信息,没有太多指导。当我运行.jsx脚本时,我需要从我的应用程序发送一个目标文件夹,它可以找到.incx文件。
目标文件夹将是动态的,具体取决于我的应用程序中的其他先前操作。
提前致谢。我在Adobe的论坛上找到了一些模糊的提示,涉及额外的.vbs文件和/或外部临时文件来保存参数,但是它们都过时了,所以我想我会问,看看是否有人知道现代方法。如果有任何不清楚的地方,我会立即回复澄清。
答案 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(具有相同的文件名)导出到同一个目录中,并删除原始文件。