Reading RTF File Containing an OLE Embedded Object

依然范特西╮ 提交于 2019-12-25 17:18:22

问题


Question :

I need to read an RTF File that contains an OLE Object as innerdocument.

RTF File = [ Ole object (word document) is embedded into it.]

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

Reference I have done :

  1. OLE as Image in RTF

Here they have done a program to extract the image embedded as OLE in RTF.

I had extracted the program which is marked as correct answer , but its does not work for me.

  1. Using OpenXML SDK. (it cannot be able to open RTF Files.)

  2. some other SDK like GemBox etc.. Which cannot be able to open innerdocument ie. ole in RTF)

Work I have done :

I had done using microsoft.office.interop.word.dll which gives an accurate answer , but it will not work on server.

For eg: it opens an RTF File using MS WORD and which is installed in client machine where there is no WORD APPLICATION Installed in server.

so , this is not suitable for me.

I need to open and read the RTF OLE Content and i need to store in a string(say for eg). bcoz with string i can do lot of things.

Can anyone has an idea to solve my issue.?


回答1:


Please use the following code example to extract the OLE object (Word document) from RTF and import it into Aspose.Words’ DOM to read its content. Hope this helps you.

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));
    }

}

I work with Aspose as Developer Evangelist.




回答2:


Thanks for the above answer. Here is another version of the code which iterates and saves all the OLE's with the original file name in a local path.

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);
                }
            }


来源:https://stackoverflow.com/questions/52927298/reading-rtf-file-containing-an-ole-embedded-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!