/// <summary> /// Extracts text from the contents of a SWF document. /// </summary> /// <param name="content">The contents of the SWF document.</param> /// <returns>The text extracted from the SWF document.</returns> /// <exception cref="ArgumentNullException">If the input buffer is null or empty.</exception> /// <remarks> /// </remarks> public override string ExtractText(byte[] content) { string retVal = String.Empty; if ((content == null) || (content.Length == 0)) { throw new ArgumentNullException("content", "The input buffer cannot be empty or null."); } try { mutex.WaitOne(); string FileName = globals.AppWorkPath + Guid.NewGuid().ToString(); string swfFileName = FileName + ".swf"; string htmFileName = FileName + ".htm"; FileStream swf = null; StreamReader htm = null; try { //store the swf file swf = new FileStream(swfFileName, FileMode.Create); swf.Write(content, 0, content.Length); swf.Close(); swf = null; //convert it to html bool success = converter.ConvertSwfFile(swfFileName, htmFileName); if (success) { htm = new StreamReader(htmFileName, encoding); string html = htm.ReadToEnd(); htm.Close(); htm = null; retVal = parser.ExtractText(ref html); } } catch (Exception ex) { if (swf != null) { try { swf.Close(); } catch {} } if (htm != null) { try { htm.Close(); } catch {} } if (globals.Settings.LogLevel <= CWLogLevel.LogInfo) { globals.FileLog.LogWarning("SwfParser failed to extract text: " + ex.ToString()); } } finally { File.Delete(swfFileName); File.Delete(htmFileName); } } catch (Exception ex) { if (globals.Settings.LogLevel <= CWLogLevel.LogWarning) { globals.FileLog.LogWarning("SwfParser failed to extract text: " + ex.Message); } } finally { GC.Collect(); mutex.ReleaseMutex(); } ParserEventArgs e = new ParserEventArgs(String.Empty); OnExtractTextComplete(e); return(retVal); }