2017-05-22 50 views
-2

LINK Extract Embedded Image Object in RTF我的代碼與我提供的鏈接相同,但它在97-2003文檔中運行良好,現在在Office 2007/2010中相同的代碼無法工作。我們通常使用OLE對象檢查RTF,並根據公司規則拒絕我們的轉換,但即使在office-2007/2010中創建了RTF,但我們的代碼也會拒絕。在Office-2007創建的RTF中是否有任何解決方案?如何檢查rtf文件中是否存在OLE對象

 using (StreamReader sr = new StreamReader(filePath)) 
        { 
         RtfReader reader = new RtfReader(sr); 
         IEnumerator<RtfObject> enumerator = reader.Read().GetEnumerator(); 
         while (enumerator.MoveNext()) 
         { 
          if (enumerator.Current.Text == "object") 
          { 
           hasOLEObjects = true; 
           break; 
          } 
         } 
        } 


    public RtfReader(TextReader reader) 
      { 
       if (reader == null) 
        throw new ArgumentNullException("reader"); 

       Reader = reader; 
      } 


public class RtfObject 
    { 
     public RtfObject(string text) 
     { 
      if (text == null) 
       throw new ArgumentNullException("text"); 

      Text = text.Trim(); 
     } 

     public string Text { get; private set; } 
    } 
+0

'RtfReader'來自哪個名稱空間/包? –

+0

它是一個TextReader – rajesh

+1

沒有內置的類叫做'RtfReader'。這看起來像是一個自己的項目類。除了猜測明顯的問題之外,不可能幫助您未發佈的代碼。例如,你爲什麼要檢查元素的*內容*而不是它的類型?不'RtfReader'暴露元素類型?現在,您正在拒絕其文本中包含「對象」一詞的任何文檔。如果用戶開始使用具有「Object」標題的模板會怎麼樣? –

回答

0

我已經增加了一個條件,如果要檢查OLE對象 如果(RtfReader.MoveToNextControlWord(枚舉, 「objclass」))

可能這可以幫助別人

public static bool ValidateOLEObjects(string filePath) 
     { 
      bool hasOLEObjects = false; 
      using (StreamReader sr = new StreamReader(filePath)) 
      { 
       RtfReader reader = new RtfReader(sr); 
       IEnumerator<RtfObject> enumerator = reader.Read().GetEnumerator(); 
       while (enumerator.MoveNext()) 
       { 
        if (enumerator.Current.Text == "object") 
        { 
         if (RtfReader.MoveToNextControlWord(enumerator, "objclass")) 
         { 
          hasOLEObjects = true; 
          break; 

          } 
        } 
       } 

       return hasOLEObjects; 
      } 
     }