Как я могу получить реальное количество страниц в документе InDesign Java

Я использую Adobe InDesign CS5 Server Java. Для установки желаемых настроек я использую следующий код:

Document myDocument = myApp.addDocument(OptArg.noDocumentPreset());
DocumentPreference docPrefs = myDocument.getDocumentPreferences();
docPrefs.setPageHeight(UnitUtils.createString("800pt"));
docPrefs.setPageWidth(UnitUtils.createString("600pt"));
docPrefs.setPageOrientation(kPageOrientationLandscape.value);
docPrefs.setPagesPerDocument(16);

Я хотел бы знать, можно ли как-то узнать реальное количество страниц документа в java без установки setPagesPerDocument? Спасибо заранее за любую помощь.


person nean0502    schedule 25.05.2020    source источник
comment
Есть методы myDoc.getAllChildFonts(), myTable.getAllChildCells(), myApp.getAllChildDocuments(). Интересно, есть ли метод myDoc.getAllChildPages()?   -  person Yuri Khristich    schedule 28.04.2021


Ответы (2)


Вы можете просто узнать количество страниц следующим образом:

var pageCount = myDocument.pages.length

$.writeln("The document has " + pageCount + " pages.");

<дел>Кстати. сценарии InDesign выполняются на JavaScript (или, точнее, на ExtendScript, который является диалектом JavaScript), который сильно отличается от языка Java.

Редактировать: Хорошо, отвечая на ваш комментарий, я понятия не имею, что такое InDesignServerAPI.jar, но, глядя на ваш код, похоже, что язык InDesign ExtendScript просто как бы завернут в код Java. Итак, я предполагаю, что вы можете получить количество страниц следующим образом:

int pageCount = myDocument.pages.length;
person mdomino    schedule 25.05.2020
comment
Большое спасибо за вашу помощь и внимание. Я использовал InDesignServerAPI.jar в качестве внешнего jar-файла в своем Java-приложении. Код в моем вопросе на Java. Я хотел бы знать, как получить количество страниц в одном существующем документе. Заранее спасибо. - person nean0502; 27.05.2020
comment
Должна быть еще какая-то та же команда. Смотрите мой отредактированный ответ. - person mdomino; 27.05.2020
comment
Спасибо за идею. Есть возможность сделать что-то вроде этого: int numberOfPages = myDocument.countPages(); Но я получаю ошибки, когда пытаюсь открыть существующий документ.. - person nean0502; 27.05.2020
comment
Ваш отзыв не совсем полезен. Какую ошибку вы получаете? И где эти методы (countPages) задокументированы? А что произойдет, если вы попробуете предложение, которое я сделал выше myDocument.pages.length? - person mdomino; 27.05.2020
comment
Единственный документ, который у меня есть, это citeseerx.ist. .psu.edu/viewdoc/. Метод countPages недостаточно документирован. Я получаю сообщение об ошибке в строке Document myDocument = myApp.addDocument(OptArg.noDocumentPreset());. Ошибка com.adobe.ids.IdsException: IDL:com/adobe/ids/IdsException:1.0 at com.adobe.ids.IdsExceptionHelper.read(Unknown Source) at com.adobe.ids.basics._ApplicationStub.addDocument(Unknown Источник) и нет страниц коллекции для объекта myDocument - person nean0502; 27.05.2020
comment
Хорошо, извините, в этом случае, пожалуйста, полностью игнорируйте мой ответ. Совершенно не знал, что на самом деле существует полная реализация автоматизации Java для InDesign server. Глядя на этот документ, я бы также предположил, что метод countPages() должен позаботиться о том, что вы хотите сделать, но если это не сработает, я не знаю, что вызывает ошибку. Я продолжу и удалю свой ответ, так как он никоим образом не отвечает на вопрос. - person mdomino; 27.05.2020
comment
Я хотел бы попросить вас не удалять ответ, потому что я понял, как использовать метод countPages() из вашего ответа. И, что касается моей проблемы, Java не поддерживается языком для новейшей версии сервера InDesign. Новейший InDesign поддерживает только скриптовые языки (я нашел). Мой документ очень старый ... поэтому мне нужно оставить свою идею о внешней банке InDesign ... - person nean0502; 28.05.2020
comment
Да, обычно InDesign (а также сервер InDesign, я думаю) автоматизируются с помощью ExtendScript, который является диалектом JavaScript и сравнительно хорошо документирован. Так что, если бы я был на вашем месте, я бы посмотрел на это, если это возможно. - person mdomino; 28.05.2020

На всякий случай. Извините, я не знаю, как это работает на Java. Но в Python для Windows это можно сделать так:

from win32com.client import Dispatch

app = Dispatch('InDesign.Application.CS6')
doc = app.Open(r"d:\sample.indd")
pages = doc.pages;
pages_length = len(pages)
doc.Close()

print(pages_length)
person Yuri Khristich    schedule 28.04.2021