Извлечение графики InDesign CS4 с использованием C # и COM - PullRequest
1 голос
/ 25 января 2010

Я пытаюсь получить подробную информацию о графике в файле InDesign. По техническим причинам я использую COM. Не мой любимый, так как (обсуждается в другом месте в StackOverflow) вы должны потратить половину своей жизни на кастинг. В теории (!) Фрагмент кода belwo должен работать. Intellisense показывает doc.AllGraphics как возвращающие объекты .

Ссылка на сценарий CS3 в http://www.indesignscriptingreference.com/CS3/JavaScript/Document.htm показывает его как Графический массив

for (int g = 1; g <= doc.AllGraphics.Count; g++) {
  InDesign.Graphic graphic = (InDesign.Graphic) doc.AllGraphics[ g ];
  ....
}

Однако я получаю это сообщение об ошибке:

Невозможно привести COM-объект типа 'System .__ ComObject' для типа интерфейса 'InDesign.Graphic. Эта операция не удалось из-за вызова QueryInterface на COM-компонент для интерфейса с IID '{6AE52037-9E4E-442D-ADFC-2D492B4BCBEF}' не удалось из-за следующей ошибки: Нет такой интерфейс поддерживается (исключение от HRESULT: 0x80004002 (E_NOINTERFACE)).

Я пытался использовать альтернативные конструкции, чтобы вернуть объект, а затем привести его к Indesign.Graphic . Все терпят неудачу с одной и той же ошибкой. Я не могу поверить, что Adobe пропустила этот интерфейс.

Какие-нибудь предложения относительно решения, чтобы я мог получить графический контент?

Ответы [ 2 ]

1 голос
/ 14 мая 2016

Это только что случилось со мной, и я попал сюда из Google! Мне удалось ее решить, поэтому я добавлю решение здесь, когда в следующий раз столкнусь с ним!

Просто удалите файл Resources for Visual Basic.tlb, который может находиться по пути C:\ProgramData\Adobe\InDesign\Version 8.0\en_GB\Scripting Support\8.0, откройте InDesign от имени администратора и дождитесь его запуска.

Я обнаружил, что приложение C # зависло при следующем запуске, поэтому пришлось закрыть InDesign и позволить C # открыть его самостоятельно! Пример:

        Type type = Type.GetTypeFromProgID("InDesign.Application");
        Application app = (Application)Activator.CreateInstance(type);

        var doc = app.Documents.Add();

        for (var i = 0; i < 5; i++)
            doc.Pages.Add(idLocationOptions.idAtBeginning);
1 голос
/ 10 февраля 2010

Я запускаю Win7 64 и CS4 здесь и тоже получил сообщение E_NOInterface. Мне потребовалось 6 часов, чтобы решить это через Google, попробуйте и ошибка. По пути в Интернет я увидел твою статью и вернулся, чтобы написать тебе, что мне помогло.

Во время установки Com-объекты не зарегистрированы правильно. Чтобы решить это

  • перейти в папку

    • для CS3: %ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\5.0 в моем случае: C:\ProgramData\Adobe\InDesignVersion 5.0\Scripting Support\5.0

    • для CS4: %ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\6.0

  • переименуйте файл «Ресурсы для Visual Basic.tlb» в «Ресурсы для Visual Basic.tlb.old»

  • открыть окно команд как администратор

  • перейдите в папку indesign, в моем случае C:\Program Files (x86)\Adobe\Adobe InDesign CS4

  • и запустите indesign в командном окне, набрав:

    indesign.exe -type
    

дождитесь запуска, и тогда вы готовы. с этим параметром он регистрирует компоненты.

Я нашел это решение здесь

...