2010-01-25 74 views
0

我试图在InDesign文件中获取图形的详细信息。由于技术原因我使用COM。不是我最喜欢的,因为(在StackOverflow的其他地方讨论过),你不得不花费一半时间铸造。在理论上(!),代码片段应该可以工作。智能感知显示doc.AllGraphics返回对象使用C#和COM提取InDesign CS4图形

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 ]; 
    .... 
} 

不过,我得到这个错误信息:使用替代结构来

Unable to cast COM object of type 'System.__ComObject' to interface type 'InDesign.Graphic'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{6AE52037-9E4E-442D-ADFC-2D492B4BCBEF}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

我试着返回一个对象,然后将其转换为Indesign.Graphic。所有失败与相同的错误。我无法相信Adobe错过了包括这个接口。

有关解决方案的任何建议,以便我可以获取图形内容?

回答

1

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

在安装过程中,Com对象未正确注册。在我的情况%ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\5.0 :为了解决这个

  • 转到文件夹

    • 对于CS3 C:\ProgramData\Adobe\InDesignVersion 5.0\Scripting Support\5.0

    • 为CS4:%ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\6.0

  • 重命名文件“资源S代表视觉Basic.tlb”到 “为Visual Basic.tlb.old资源”

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

  • 去InDesign的文件夹中,在我的情况C:\Program Files (x86)\Adobe\Adobe InDesign CS4

  • 和发射的InDesign在命令窗口中键入:

    indesign.exe -type 
    

等待发射,然后你是好人去。使用此参数注册组件。

我发现,解决here

+0

不幸的是,在XP中,虽然它重新创建了TLB,并且添加了这个作为VS2005的COM参考将其转换为InterOp DLL,但它仍然不起作用。但谢谢你的尝试。 – wilson32 2010-02-10 14:34:14

+0

为我工作。重新命名文件后,我使用“以管理员身份运行”重新启动了InDesign CS4,并且工作正常。我不需要做indesign.exe类型的部分。 – Crispy 2015-07-09 20:48:51

+0

因为这个解决方案,它只花了我1.5小时为我修复:)感谢回来。 – 2015-08-26 15:20:50

0

这只是发生在我身上,我在这里登陆谷歌从!我设法解决它,所以下次我遇到它时会在这里添加解决方案!

只需删除可能位于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);