首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用InDesign和COM技术提取CS4图形

利用InDesign和COM技术提取CS4图形
EN

Stack Overflow用户
提问于 2010-01-25 17:19:40
回答 2查看 4K关注 0票数 1

我试图在InDesign文件中获取图形的详细信息。出于技术原因,我使用COM。不是我最喜欢的,(在StackOverflow的其他地方讨论过)你得花上一半的时间去做演员。在理论上(!),下面的代码片段应该可以工作。Intellisense将doc.AllGraphics显示为返回对象

CS3脚本引用在http://www.indesignscriptingreference.com/CS3/JavaScript/Document.htm上显示为图形的数组

代码语言:javascript
复制
for (int g = 1; g <= doc.AllGraphics.Count; g++) {
  InDesign.Graphic graphic = (InDesign.Graphic) doc.AllGraphics[ g ];
  ....
}

但是,我收到以下错误消息:

无法将'System.__ComObject‘类型的COM对象转换为接口类型’Insign.Grapchi‘。此操作失败,因为对IID '{6AE52037-9E4E-442D-ADFC-2D492B4BCBEF}‘接口的COM组件的QueryInterface调用失败:不支持此类接口( HRESULT: 0x80004002 (E_NOINTERFACE)例外)。

我尝试过使用替代构造来返回对象,然后将其转换为Indesign.Graphic.所有的失败都有相同的错误。我不敢相信Adobe错过了这个界面。

对于解决方案有什么建议吗?这样我就可以得到图形内容了?

EN

回答 2

Stack Overflow用户

发布于 2010-02-10 01:12:06

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

在安装期间,Com-对象没有正确注册。解决这个问题

  • 转到文件夹
代码语言:javascript
复制
- for cs3: `%ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\5.0` in my case: `C:\ProgramData\Adobe\InDesignVersion 5.0\Scripting Support\5.0`
- for cs4: `%ALLUSERSPROFILE%\Adobe\InDesign\Version 5.0\Scripting Support\6.0`

  • 将文件“Visual Basic.tlb的参考资料”重命名为“VisualBasic.tlb.old的参考资料”
  • 以管理员身份打开命令窗口
  • 转到indesign文件夹,在我的例子中是C:\Program Files (x86)\Adobe\Adobe InDesign CS4
  • 并通过键入以下命令在命令窗口中启动indesign: indesign.exe -type

等着发射,然后你就可以出发了。使用此参数,它将注册组件。

我找到了解决方案这里

票数 1
EN

Stack Overflow用户

发布于 2016-05-14 16:29:22

这件事刚刚发生在我身上,我是从谷歌来到这里的!我设法解决它,所以将添加解决方案,为下次我遇到它!

简单地,删除可能位于C:\ProgramData\Adobe\InDesign\Version 8.0\en_GB\Scripting Support\8.0路径上的C:\ProgramData\Adobe\InDesign\Version 8.0\en_GB\Scripting Support\8.0文件,并以管理员身份打开InDesign并等待它运行。

下一次运行C#应用程序时,我发现它要挂起,所以必须关闭InDesign,让C#自己打开它!示例:

代码语言:javascript
复制
        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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2134119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档