【问题标题】:Is it possible to call a web service with Indesign javascript?是否可以使用 Indesign javascript 调用 Web 服务?
【发布时间】:2011-11-26 07:02:26
【问题描述】:

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

我们使用 Adob​​e Indesign CS3 和 CS5 来创建用于打印的文档。

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

我使用 Javascript 编写了这个脚本。

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

如果有,怎么做?

如果不是,从桌面调用 Web 服务的最佳方式是什么?

谢谢。

【问题讨论】:

  • 在简单地否决它之前,请留下建设性的批评,说明这是一个糟糕的问题。我在这里相对较新,只是寻求帮助,尽可能简单地提出我的问题。
  • ...您是说从桌面发布文档中调用 ws 吗?
  • 基本上,是的。我需要从 Adob​​e Indesign CS3 - CS5 中调用 ws,尽管该计划不需要在调用脚本时打开文档。
  • 没有设计感? Indesign 如何使用 javascript?更重要的是,为什么?我很确定印刷的小册子不能执行代码。
  • 我相信你说得对,2011 年印刷的小册子无法执行代码。然而,Indesign 是由一家名为 Adob​​e 的公司创建的计算机程序。该程序使用脚本来自动化创建这些文档的某些方面,而这些文档仍在计算机上。自动化这种创建有助于降低劳动力成本。

标签: javascript web-services adobe-indesign


【解决方案1】:

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

【讨论】:

  • JS?那么是的,您可能可以,想知道是否可以在文档中包含整个 jQuery 库:-),进行 Ajax 调用。
【解决方案2】:

不是和是。

不,没有办法 (afaik) 让 InDesign 从脚本调用 Web 服务。这是非常有可能的,并且通常通过 InDesign 插件完成(您可以执行任意 c++ 代码,以便您可以做任何事情)。然而,这是一个完全不同的学习方式。

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

可以在here 找到使用“可扩展”的基本示例。

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

【讨论】:

  • 我无语了。这个可扩展库非常棒。这正是我所需要的。谢谢!如果可以的话,我会加一倍。
  • @Ben,感谢关于猪肉的提示。简单地看一下代码库,我不认为猪肉是可扩展的。它们可能共享一些共同的功能,但它们的结构不同,有时服务于不同的目的。 pigy 看起来是 ExtendScript 的(网络)数据库连接器,带有一些附加功能。 Extendables 是一个带有一些附加功能的 ExtendScript 测试框架。
  • 我认为您不能在 ExtendScript 中使用 jQuery 来处理 Web 请求。 Extendables 使用 InDesign 脚本引擎可用的套接字。见github.com/debrouwere/Extendables/blob/master/core-packages/…。至于 jQuery(内部)和浏览器,它们使用 XmlHttpRequest 对象,除非 ExtendScript 支持调用 ActiveX/COM 对象或具有 XmlHttpRequest 对象类,否则它们可能不会暴露给 ExtendScript。
  • 你可能是对的。我不确定 jQuery 和其他依赖于 XmlHttpRequest 的库在 InDesign 脚本引擎中的工作情况。我会尝试一下,但我无法再使用所需的工具,所以我只是稍微编辑了答案。
【解决方案3】:

已经提到了可扩展性:

Extendables

它不是 jQuery,而是一个用于 InDesign 脚本的库。

Rorohiko's blog 上可以找到最完整的讨论,并附有一个很好的直接示例。

【讨论】:

  • 可扩展链接已过期。
  • Extendables 好像已经死了? ...至少链接是!
【解决方案4】:

除了可扩展,还有 2 个替代选项:

Adobe Bridge/Bridgetalk

无法说明 Adob​​e 套件的特定版本,但如果您可以使用或拥有 Adob​​e Bridge/Bridgetalk,则可以利用 Adob​​e 的跨应用程序通信和 Bridge 可用的 HttpConnection 类(根据 SDK 文档),并让 InDesign 调用 Bridge 以发出 HTTP 请求并将结果传回 In​​Design。

我没有 InDesign 的具体示例,但这里有一些适用于 Illustrator。我认为它可以轻松移植到 InDesign。

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

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

从外部调用 Web 服务并连接到 ExtendScript

Adobe 的脚本 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 服务,然后通过 application.doScript('ExtendScript code sn-p here') (或 doJavascript) 其中对于 ExtendScript sn-p,可能是一个简短的 sn-p,它使用 ExtendScript 包含包含实际的 JSX 文件,然后调用 ExtendScript函数/方法,将 Web 服务结果作为参数传递给它。

在一些解决方案中描述了这种技术的一个示例(不包括 Web 服务调用部分):

Is it possible to execute JSX scripts from outside ExtendScript?

【讨论】:

  • 我已经尝试过你提到的脚本,它们都可以在当前版本的 Bridge 和 InDesign 中运行,但是它们需要 30 秒或更长时间才能加载 367 字节的网页并在 30.7 的 Safari 中加载小姐。这与你的经历相符吗?
  • 自从我上次使用该功能已经有好几年了,所以很遗憾,我不记得了,但这对我来说是可以忍受的。 Adobe 产品确实需要时间来加载,这可能是造成这种情况的一个因素。抱歉,我无法提供更多帮助。
  • 人们可能会考虑缓慢是否特定于某些版本的 Bridge 和 InDesign、Illustrator 等。更糟糕的情况是,您可能希望使用 AppleScript 或 COM/VBScript 查看外部脚本路径以获得速度优势。
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多