是否可以使用Indesign javascript调用Web服务?

时间:2011-09-27 18:18:32

标签: javascript web-services adobe-indesign

我是一家印刷公司的内部开发人员。

我们使用Adobe Indesign CS3和CS5创建用于打印的文档。

我在Adobe Extendscript中创建了一个脚本,该脚本创建了一个Indesign文档,并在客户端自行完成时处理一些基本的转换。

我使用Javascript编写此脚本。

是否可以通过这样的脚本调用Web服务?

若然,怎么样?

如果没有,从桌面调用Web服务的最佳方法是什么?

谢谢。

5 个答案:

答案 0 :(得分:6)

已经提到过Extendables:

Extendables

它不是jQuery,而是InDesign Scripting的库。

最完整的讨论发现在Rorohiko's blog,有一个很好的直接例子。

答案 1 :(得分:5)

不,是的。

不,没有办法(afaik)让InDesign从脚本调用Web服务。这很可能并且经常从InDesign插件中完成(您可以执行任意c ++代码,以便您可以执行任何操作)。然而,这是一个完全不同的野兽要学习。

是的,可以使用库从ExtendScript中完成。因此,基本上您的脚本会调用Web服务来获取数据(可能使用从InDesign或文档中获取的参数),然后将返回的值发送到其他InDesign脚本函数中以执行操作。

可以找到使用'Extendables'的基本样本here

编辑:因为似乎有些混乱:文件不是运行脚本的文件,甚至很少包含它们。脚本以InDesign特定的Javascript格式(.jsx)保存,并由InDesign脚本引擎解释。

答案 2 :(得分:1)

您也可以根据操作系统调用AppleScript或VB,并使用某些命令行实用程序(如cUrl)来调用您的Web服务。此外,您还可以尝试使用来自Rorohiko的免费脚本getUrl,它可以简化ExtendScript中的Web通信。

答案 3 :(得分:0)

...可能是您使用InDesign从文档中创建pdf。在pdf中你可能可以。但是从原始的InDesign doc可能不是。我还投票说你将无法在文档打开之前运行js。我建议与InDesign专家一起讨论。我很好奇你会想出什么,因为我记得ID确实让你在文档中包含了交互性。如果您在其他地方找到答案,请回复。

答案 4 :(得分:0)

除了Extendables,还有2个备选选项:

Adob​​e Bridge / Bridgetalk

对于Adobe套件的特定版本不能说,但如果您可以使用或拥有Adobe Bridge / Bridgetalk,您可以使用Adobe的跨应用程序通信和HttpConnection类可用于Bridge(如根据SDK doc),让InDesign调用Bridge来发出HTTP请求并将结果传递回InDesign。

我没有InDesign的具体示例,但这里有一些适用于Illustrator的内容。我认为它很容易移植到InDesign。

https://gist.github.com/daluu/2d9dec72d0863f9ff5a7

https://gist.github.com/mericson/6509997

在外部进行Web服务调用,并与ExtendScript接口

Adob​​e的脚本API引擎不是严格的ExtendScript / Javascript。您还可以使用COM / VBScript(在Windows上)或Applescript(在Mac上)上的脚本API,它们在InDesign外部执行,但通过API与InDesign交互。

对于Windows,COM,我指的是任何支持COM的语言,因此它不仅仅是默认的VBScript(可以是Python,Perl,PHP,Java,.NET,甚至是Microsoft JScript - 他们的Javascript版本用于命令行/桌面/等。)。

在其他引擎上使用脚本API,您可以从其他语言(VBScript,Applescript等)外部进行Web服务调用,然后通过脚本API调用(在COM / Applescript中)将结果传递给ExtendScript strong> application.doScript(' ExtendScript code snippet here')(或doJavascript),对于ExtendScript片段,可以是使用ExtendScript包含的简短片段,包括实际的JSX文件,然后调用ExtendScript函数/方法,将Web服务结果作为参数传递给它。

此处的一些解决方案中描述了此技术的示例(未涵盖Web服务调用部分):

Is it possible to execute JSX scripts from outside ExtendScript?