我想将一个 VB 程序重构为 ExtendScript 以自动化 Adobe Illustrator CS4 中的一些绘图,但需要从数据库中读取。是否可以使用 ExtendScript 从数据库中读取?如何?
5 回答
是的,ES 可以读取 CSV。只需使用逗号描述格式化您的数据库。
这是一个可以解决问题的函数:
function readPref (thePath) {
if (File(thePath).exists == true) {
var file = File(thePath);
file.open("r");
file.encoding= 'BINARY';
var theText = file.read();
file.close();
return String(theText).split(",")
}
};
应该返回一个包含你需要的数组。让VB导出一个数据库,然后用它来读取它。多佐。
我有一些我一直在成功使用的不同解决方案:创建一个可以访问您的数据库的 Web 服务,然后从 ExtendScript 使用 http 连接来使用这些服务(从那里您几乎可以做任何您想做的事情) .
Illustrator 脚本引擎没有提供任何直接读取外部数据的机制,但是您有几种方法可以做到这一点......
- 编写一个连接数据库的外部程序以生成VB脚本,并使用Illustrator执行“生成”脚本,这是我以前的做法。
- 自cs3以来的新ScriptUI提供了打开一个Window,包含一个flash swf作为驱动Illustrator JS引擎的接口。您可以在 Flash 内容中读取 xml、调用 webservices、Flash Remoting。我不确定您是否对这些工具集感到满意。
我的理解是,您需要在 VB 代码中使用 ExtendScript 来“doScript()”。ExtendScript 本身没有任何真正的数据库连接。但我熟悉使用 VB 代码连接数据库并返回结果的人。ExtendScript 具有运行 VB 代码的 doScript 方法。诀窍,它接缝,是找到一种方法将数据返回到 ExtendScript 以告诉 Adobe 应用程序该做什么。据我所知,.doScript 没有一种很好的方式来接受嵌入代码的结果。所以我听说人们做的是以下几件事之一:
- 让 VB 代码编写一个 ExtendScript 代码可以读取和解析的文本文件。
- 让 VB 代码将“ScriptLabel”添加到您的 Adobe Illustrator 文档中。然后使用 ExtendScript 读取相同的标签。这实际上与编写文本文件相同,只是没有文件。
高温高压
Jon S. Winters,ExtendScript 支持,电子出版支持
无论您是否需要将 VB 重构为 100% 的 ExtendScript(没有 VB 代码,全部为 ExtendScript),我想说最简单的解决方案是这样的:
有一个调用 ExtendScript 的 VB/VBScript 包装器,该包装器处理数据库交互并将数据来回传递给 ExtendScript。这允许您保持数据库代码简单,重用您在 VB 中拥有的内容,并使 ExtendScript 保持简单。
您可以使用 Adobe 应用程序的 COM API 从 VB/VBScript 调用 ExtendScript,它具有从 ExtendScript 获得的所有绘图方法以及用于执行 javascript(或更实际地是 ExtendScript)代码的 doJavascript() 方法。同样的 doJavascript() 方法可用于拉入 ExtendScript JSX 文件,而不是一段 javscript 代码。您可以在相关的 SO 帖子中找到更多详细信息:
是否可以从 ExtendScript 外部执行 JSX 脚本?
查看特定于 Windows 的答案。进一步考虑这个问题和解决方案,它也可以适用于其他平台(Mac、Python、Perl 等)它不一定适用于 VB 和 Windows,同样的方法可以用于通过 COM 与外部的 ExtendScript 交互Mac 上的 Windows 或 Applescript,这将适用于任何与 COM/Applescript 兼容(或接口)的语言。