Можно ли вызвать веб-сервис с помощью JavaScript-кода Indesign?
Я - собственный разработчик для печатной компании.
Мы используем Adobe Indesign CS3 и CS5 для создания документов для печати.
В Adobe Extendscript я создал script, который создает документ Indesign и обрабатывает некоторые базовые преобразования, когда клиент сам не делает этого.
Я использовал Javascript для написания этого script.
Можно ли вызвать веб-службу через такой script?
Если да, то как?
Если нет, то каким будет лучший способ вызвать веб-службу с рабочего стола?
Спасибо.
Ответы
Ответ 1
Нет и Да.
Нет, нет способа (afaik) заставить InDesign вызвать веб-службу из script. Это очень возможно и часто делается из плагинов InDesign (вы можете выполнить произвольный код С++, чтобы вы могли делать что угодно). Тем не менее, это совсем другой зверь, чтобы учиться.
Да, это возможно сделать из ExtendScript с помощью библиотеки. Таким образом, в основном ваш script должен вызвать веб-службу для получения данных (возможно, используя параметры, полученные из InDesign или документа), а затем отправить возвращаемые значения в другие функции InDesign script для выполнения операций.
Базовый образец можно найти здесь, в котором используется "Расширяемые файлы".
РЕДАКТИРОВАТЬ: Поскольку, похоже, возникает некоторая путаница: документы не те, что работают под управлением script, и очень редко даже содержат их. Сценарии сохраняются в формате Javascript в формате InDesign (.jsx) и интерпретируются механизмом сценариев InDesign.
Ответ 2
Удлинители уже упоминались:
Extendables
Это не jQuery, а это библиотека для InDesign Scripting.
Наиболее полное обсуждение можно найти в блоге Rorohiko с хорошим прямым примером.
Ответ 3
Вы также можете вызвать AppleScript или VB в зависимости от os и использовать некоторую утилиту командной строки, например cUrl, для вызова вашего веб-сервиса. Также вы можете попробовать getUrl, бесплатный script от Rorohiko, который упрощает веб-связь внутри ExtendScript.
Ответ 4
... возможно, если вы используете InDesign для создания pdf-документа из документа. В pdf вы, вероятно, можете. Но из необработанного документа InDesign, вероятно, нет. Я также проголосую за то, что вы не сможете запустить js из документа до его открытия. Я бы предложил обсудить его с экспертами InDesign. Мне любопытно, что вы придумали, так как я помню, что идентификатор позволяет включить интерактивность в документ. Пожалуйста, отправьте ответ, если вы найдете ответ в другом месте.
Ответ 5
Помимо Extendables, есть 2 альтернативных варианта:
Adobe Bridge/Bridgetalk
Нельзя сказать для определенных версий пакета Adobe, но если вы можете использовать или иметь Adobe Bridge/Bridgetalk, вы можете использовать интерфейс кросс-приложений Adobe и класс HttpConnection, доступные для Bridge (согласно SDK-документу), и попросите InDesign вызвать Bridge, чтобы выполнить HTTP-запрос и передать результаты обратно в InDesign.
У меня нет конкретного примера для InDesign, но здесь некоторые предназначены для Illustrator. Я бы предположил, что он легко переносит на InDesign.
https://gist.github.com/daluu/2d9dec72d0863f9ff5a7
https://gist.github.com/mericson/6509997
Сделать внешние вызовы веб-служб и интерфейс к ExtendScript
API-интерфейс API-скриптов Adobe не является строго ExtendScript/Javascript. Вы также можете использовать API script из COM/VBScript (в Windows) или Applescript (на Mac), которые выполняют внешний интерфейс InDesign, но взаимодействуют с InDesign через API.
Для Windows, через COM, я имею в виду любой язык, поддерживающий COM, поэтому он не только по умолчанию VBScript (может быть Python, Perl, PHP, Java,.NET, даже Microsoft JScript - их версия Javascript для командной строки/настольные/др.).
Используя API script в другом движке, вы вызываете вызов веб-службы извне с другого языка (VBScript, Applescript и т.д.), затем передаете результаты в ExtendScript с помощью вызова API script (в COM/Applescript) application.doScript( "фрагмент кода ExtendScript здесь" ) (или doJavascript), где для фрагмента ExtendScript может быть короткий фрагмент, который использует ExtendScript, включает в себя фактический JSX файл, а затем вызывает функцию ExtendScript/метод, передавая ему результаты веб-службы в качестве аргументов.
Пример этой методики (не охватывающей часть вызова веб-службы) описывается здесь в некоторых решениях:
Возможно ли выполнить сценарии JSX извне ExtendScript?