读取包含OLE嵌入式对象的RTF文件

时间:2018-10-22 10:35:22

标签: c# rtf ole aspose

问题:

我需要读取一个包含OLE对象作为内部文档的RTF文件。

RTF文件= [Ole对象(Word文档)已嵌入其中。]

Sample RTF File that contains word as OLE Embedded into it.

我已经完成的参考:

  1. OLE as Image in RTF

他们在这里完成了一个程序,以提取嵌入到OLE中的图像。

我已经提取了标记为正确答案的程序,但是它对我不起作用。

  1. 使用OpenXML SDK。 (它无法打开RTF文件。)

  2. 一些其他SDK,例如GemBox等。无法打开innerdocument。 RTF中的ole)

我已完成的工作:

我已经使用了 microsoft.office.interop.word.dll ,它给出了准确的答案,但在服务器上不起作用。

例如:它将使用MS WORD打开RTF文件,并安装在客户端计算机中,而服务器中未安装WORD APPLICATION。

所以,这不适合我。

我需要打开并阅读RTF OLE内容,并且需要存储在字符串中(例如,例如)。用字符串bcoz我可以做很多事情。

有人可以解决我的问题吗??

2 个答案:

答案 0 :(得分:2)

请使用以下代码示例从RTF中提取OLE对象(Word文档)并将其导入Aspose.Words的DOM中以读取其内容。希望对您有帮助。

Document doc = new Document(MyDir + "SAMPLE.rtf");

Shape shape = (Shape)doc.GetChild(NodeType.Shape, 0, true);
if (shape.OleFormat != null)
{
    //Save the document to disk.
    shape.OleFormat.Save(MyDir + "output" + shape.OleFormat.SuggestedExtension);

    if (shape.OleFormat.SuggestedExtension == ".docx")
    {
        //Import the .docx ole object into Aspose.Words' DOM
        Document ole = new Document(MyDir + "output" + shape.OleFormat.SuggestedExtension);
        Console.WriteLine(ole.ToString(SaveFormat.Text));
    }

}

我与Aspose一起担任开发人员推广人员。

答案 1 :(得分:0)

感谢您的回答。这是该代码的另一个版本,该代码迭代并使用原始文件名将所有OLE保存在本地路径中。

string MyDir = @"E:\temp\";
            Document doc = new Document(MyDir + "Requirement#4.rtf");

            NodeCollection nodeColl = doc.GetChildNodes(NodeType.Shape, true);
            foreach (var node in nodeColl)
            {
                Shape shape1 = (Shape)node;
                if (shape1.OleFormat != null)
                {
                    shape1.OleFormat.Save(MyDir + shape1.OleFormat.SuggestedFileName + shape1.OleFormat.SuggestedExtension);
                }
            }