【问题标题】:Extracting InDesign CS4 Graphics using C# and COM使用 C# 和 COM 提取 InDesign CS4 图形
【发布时间】:2020-01-26 20:09:16
【问题描述】:

我正在尝试获取 InDesign 文件中图形的详细信息。出于技术原因,我使用的是 COM。不是我最喜欢的,因为(在 StackOverflow 的其他地方讨论过)你必须花费一半的时间来铸造。在 Theory (!) 中,代码 sn-p belwo 应该可以工作。 Intellisense 将 doc.AllGraphics 显示为返回 objects

http://www.indesignscriptingreference.com/CS3/JavaScript/Document.htm 的 CS3 脚本参考将其显示为 图形数组

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。所有都失败并出现相同的错误。我不敢相信 Adob​​e 错过了这个界面。

有什么建议可以让我获得图形内容吗?

【问题讨论】:

    标签: c# com graphics adobe-indesign


    【解决方案1】:

    我在这里运行 Win7 64 和 CS4 并且也收到了 E_NOInterface 消息。 我花了 6 个小时通过谷歌解决它,尝试和错误。在通过互联网的路上,我在这里看到了你的帖子,然后回来写信告诉你对我有什么帮助。

    在安装过程中,Com-Objects 没有正确注册。解决这个问题

    • 进入文件夹

      • 对于 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

    • 将文件“Resources for Visual Basic.tlb”重命名为“Resources for Visual Basic.tlb.old”

    • 以管理员身份打开命令窗口

    • 转到 indesign-Folder,在我的情况下为 C:\Program Files (x86)\Adobe\Adobe InDesign CS4

    • 并在命令窗口中输入以下命令启动 indesign:

      indesign.exe -type
      

    等待发射,然后你就可以开始了。使用此参数注册组件。

    我找到了解决方案here

    【讨论】:

    • 不幸的是,在 XP 中,虽然它重新创建了 TLB,并将其作为 COM 引用添加到 VS2005,但它仍然无法工作。但是感谢您的尝试。
    • 为我工作。重新命名文件后,我刚刚使用“以管理员身份运行”重新启动了 InDesign CS4,并且工作正常。我不需要做 indesign.exe 类型的部分。
    • 因为有了这个解决方案,我只花了 1.5 小时就为我解决了问题 :) 感谢您回来。
    【解决方案2】:

    这件事刚刚发生在我身上,我从 Google 来到这里!我设法解决了它,所以下次遇到它时会在这里添加解决方案!

    只需删除C:\ProgramData\Adobe\InDesign\Version 8.0\en_GB\Scripting Support\8.0 路径下的Resources for Visual Basic.tlb 文件,然后以管理员身份打开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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多