C# 如何将此对象保存到文件中?

C# 如何将此对象保存到文件中?,c#,interop,ms-word,C#,Interop,Ms Word,我有一些word文档,里面有对象。我正在测试一个有3个pdf文件的文件(wordApp.Selection.InlineShapes.Count与此匹配),但是我无法从对象中获取任何信息。如何将其保存到磁盘?非常感谢您的帮助,因为inlineShape.OLEFormat.IconLabel在所有3个实例中都是空字符串 var wordApp = new Word.Application(); object confirmConversions = false;

我有一些word文档,里面有对象。我正在测试一个有3个pdf文件的文件(wordApp.Selection.InlineShapes.Count与此匹配),但是我无法从对象中获取任何信息。如何将其保存到磁盘?非常感谢您的帮助,因为inlineShape.OLEFormat.IconLabel在所有3个实例中都是空字符串

        var wordApp = new Word.Application();
        object confirmConversions = false;
        object readOnly = true;

        object missing = Type.Missing;
        this.document = wordApp.Documents.Open(
            ref fn, ref confirmConversions, ref readOnly,
            ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing,
            ref missing);

        string applicationName = null;

        foreach (Microsoft.Office.Interop.Word.InlineShape inlineShape in this.document.InlineShapes)
        {
            applicationName = inlineShape.OLEFormat.IconLabel;
        }

以下是我发现的一篇文章的一个片段,它解释了您需要采取的方法:

可以嵌入到文件中的任何文件 作为OLE对象的文档可以 提取。然而,我们可能不是 能够为您提供一个简单的代码 例如,如果技术没有 属于我们(如Adobe Acrobat) 文件)

我们正在对Office对象执行的操作 正在激活对象,然后 利用暴露的环境 IDispatch接口,以便我们可以使用 COM互操作以直接通信 使用对象的编程模型。 碰巧,Office应用程序 通常公开SaveAs方法 我们可以打电话把文件保存在 问题穿过办公室 这种方式的编程模型是一个很好的例子 方便的快捷方式,使保存 嵌入的对象具有非常小的 代码

我怀疑Adobe Acrobat公开了一个 类似的编程模型,因为 有一个Adobe Acrobat类型 图书馆您将不得不浏览 键入Library以查看它是否公开了一些 某种保存或另存为方法。如果是 则可以将其添加为对的引用 您的项目(通过COM引用) 中“添加引用”对话框的选项卡 VisualStudio)并采取类似的措施 正如Ji在他的帖子中所建议的那样 在上面


以下是我发现的一篇文章的一个片段,它解释了您需要采取的方法:

可以嵌入到文件中的任何文件 作为OLE对象的文档可以 提取。然而,我们可能不是 能够为您提供一个简单的代码 例如,如果技术没有 属于我们(如Adobe Acrobat) 文件)

我们正在对Office对象执行的操作 正在激活对象,然后 利用暴露的环境 IDispatch接口,以便我们可以使用 COM互操作以直接通信 使用对象的编程模型。 碰巧,Office应用程序 通常公开SaveAs方法 我们可以打电话把文件保存在 问题穿过办公室 这种方式的编程模型是一个很好的例子 方便的快捷方式,使保存 嵌入的对象具有非常小的 代码

我怀疑Adobe Acrobat公开了一个 类似的编程模型,因为 有一个Adobe Acrobat类型 图书馆您将不得不浏览 键入Library以查看它是否公开了一些 某种保存或另存为方法。如果是 则可以将其添加为对的引用 您的项目(通过COM引用) 中“添加引用”对话框的选项卡 VisualStudio)并采取类似的措施 正如Ji在他的帖子中所建议的那样 在上面


如果您愿意使用第三方控件,则可以使用Aspose轻松完成此操作。文字:

         Aspose.Words.Document d = new Document(@"C:\users\john\desktop\embeddedPDF.docx");
        foreach (Aspose.Words.Drawing.Shape shp in d.GetChildNodes(NodeType.Shape, true))
        {
        shp.OleFormat.Save(@"C:\Temp\testoutput.pdf");
        }

如果您愿意使用第三方控件,则可以使用Aspose轻松完成此操作。文字:

         Aspose.Words.Document d = new Document(@"C:\users\john\desktop\embeddedPDF.docx");
        foreach (Aspose.Words.Drawing.Shape shp in d.GetChildNodes(NodeType.Shape, true))
        {
        shp.OleFormat.Save(@"C:\Temp\testoutput.pdf");
        }

其他
inlineShape
properties呢?据我所知,这些属性没有任何有用的信息(文件名、大小、类型等)。有什么特别的原因你不把它命名为“文件名”吗?非描述性或非直观的变量名是万恶之源。David:+1。有那么一秒钟,我想他们可能把一个怒不可遏的尼安德特人或什么东西传给了世界!其他
inlineShape
properties呢?据我所知,这些属性没有任何有用的信息(文件名、大小、类型等)。有什么特别的原因你不把它命名为“文件名”吗?非描述性或非直观的变量名是万恶之源。David:+1。有那么一秒钟,我想他们可能把一个怒不可遏的尼安德特人或什么东西传给了世界!非常感谢。回答得很好。我会调查的,谢谢。回答得很好。我会调查的,谢谢。就像我担心的那样。这真糟糕,谢谢你。就像我担心的那样。这真糟糕。