public void PdfTextExtractorTestMethod1()
        {
            string text = new PdfTextExtractor().GetTextByCommandLine(@"D:\DHL\A.pdf");

            int textlength = text.Length;

        }
Example #2
0
        public virtual string GetText()
        {
            var output = new StringBuilder();

            using (var pdfReader = GetPdfReader())
            {
                if (!IsPdf)
                {
                    return(null);
                }

                for (var i = 1; i <= pdfReader.NumberOfPages; i++)
                {
                    var text = PdfTextExtractor.GetTextFromPage(pdfReader, i, new SimpleTextExtractionStrategy());
                    output.AppendLine(text);
                }
            }

            return(output.ToString());
        }
Example #3
0
        public string Parse()
        {
            if (!File.Exists(Context.Path))
            {
                throw new FileNotFoundException("File " + Context.Path + " is not found");
            }

            using (PdfReader reader = new PdfReader(this.Context.Path))
            {
                StringBuilder text = new StringBuilder();

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
                    string thePage = PdfTextExtractor.GetTextFromPage(reader, i, its);
                    text.AppendLine(thePage);
                }
                return(text.ToString());
            }
        }
Example #4
0
        public static string GetPdfText(string filename)
        {
            StringBuilder text = new StringBuilder();

            if (File.Exists(filename))
            {
                PdfReader pdfReader = new PdfReader(filename);

                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                    string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                    currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                    text.Append(currentText);
                }
                pdfReader.Close();
            }
            return(text.ToString());
        }
Example #5
0
        public static void ExtractTextFromPdfToTxt(string path, string directoryPath)
        {
            using (PdfReader reader = new PdfReader(path))
            {
                StringBuilder text = new StringBuilder();

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                }

                string fileName = directoryPath + Path.GetFileName(path) + ".txt";
                fileName = fileName.Replace(".pdf", "");

                if (!File.Exists(fileName))
                {
                    File.WriteAllText(fileName, text.ToString());
                }
            }
        }
Example #6
0
        /// <summary>
        /// Get PDF content from a metnioned URL
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public string GetPDFContentFromURL(string url)
        {
            string        filepath = GetTempPDFFilePath();
            StringBuilder text     = new StringBuilder();

            Console.WriteLine("Filepath : " + filepath);
            Report.Pass("Getting PDF content ... " + filepath);
            log.Info("Getting PDF content ...");
            if (File.Exists(filepath))
            {
                //string[] lines;
                (new WebClient()).DownloadFile(url, filepath);

                Report.Pass("PDf File : " + filepath + " exists");
                log.Info("PDf File : " + filepath + " exists");

                PdfReader reader = new PdfReader(filepath);

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();

                    string   page  = PdfTextExtractor.GetTextFromPage(reader, i, strategy);
                    string[] lines = page.Split('\n');
                    for (int j = 0; j < lines.Length; j++)
                    {
                        string line = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(lines[j]));
                        text.Append(line);
                    }
                }
                reader.Close();
                RemoveTempFile(filepath);
            }
            else
            {
                Report.Fail("PDf File :" + filepath + " does not exists");
                log.Error(TestContext.CurrentContext.Test.MethodName + "PDf File :" + filepath + " does not exists");
            }

            return(text.ToString());
        }
Example #7
0
        private void button1_Click(object sender, EventArgs e)
        {
            // Start Reading eBook //
            if (textBox1.Text == "")
            {
                MessageBox.Show(" Please Enter a location", "PDF to TEXT Converter");
            }

            else if (File.Exists(filename))
            {
                try
                {
                    StringBuilder text      = new StringBuilder();
                    PdfReader     pdfReader = new PdfReader(filename);
                    progressBar1.Maximum = pdfReader.NumberOfPages;
                    for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                        string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                        text.Append(System.Environment.NewLine);
                        text.Append("\n Page Number:" + page);
                        text.Append(System.Environment.NewLine);
                        currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                        text.Append(currentText);
                        pdfReader.Close();
                        progressBar1.Value++;
                    }
                    pdftext.Text      += text.ToString();
                    progressBar1.Value = 0;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "Error");
                }
            }
            else
            {
                pdftext.Text = "Error: eBook does not exist at the specified location";
            }
            // End Reading eBook //
        }
Example #8
0
        public static string ParsePdf(string filename)
        //public static int ParsePdf(string filename)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException("fileName");
            }

            using (PdfReader textreader = new PdfReader(filename))
            {
                StringBuilder sb = new StringBuilder();

                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                for (int page = 0; page < textreader.NumberOfPages; page++)
                {
                    string text = PdfTextExtractor.GetTextFromPage(textreader, page + 1, strategy);
                    if (!string.IsNullOrWhiteSpace(text))
                    {
                        sb.Append(Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(text))));
                    }
                }
                string sb_final            = sb.ToString();
                int    new_file_name_index = sb_final.IndexOf("Number");
                int    startValue          = new_file_name_index + 8;
                string new_file_name       = sb_final.Substring(startValue, 6);

                return(new_file_name);

                // Code adjustment

                /*if (new_file_name == "201363")
                 *
                 * {
                 *  return new_file_name;
                 * }
                 * else
                 * {
                 *  return "";
                 * }*/
            }
        }
Example #9
0
        private bool isGoodChart(PdfDocument document)
        {
            int numPages = document.GetNumberOfPages();

            for (int pageNumber = 1; pageNumber <= numPages; pageNumber++)
            {
                PdfPage currentPage = document.GetPage(pageNumber);
                string  pageContent = PdfTextExtractor.GetTextFromPage(currentPage);
                foreach (string doc in physicianList)
                {
                    // checks for a completed chart
                    string physicianString = "ED Provider Notes by " + doc;
                    string dischargeNote   = "ED Discharge Summary Note";
                    if (pageContent.Contains(physicianString) && pageContent.Contains("Physical Exam"))
                    {
                        // LOGGING
                        global_log_file_sw.Write(physicianString + " " + "Physical Exam" + " on page " +
                                                 pageNumber.ToString() + " - GOOD");

                        return(true);
                    }
                    // checks for cosign needed charts
                    // these will be SC eventually, but should be sent to coding
                    else if (pageContent.Contains(dischargeNote) &&
                             pageContent.Contains(doc) &&
                             pageContent.Contains("Status: Cosign Needed"))
                    {
                        // LOGGING
                        global_log_file_sw.Write(dischargeNote + " " + doc + " Status:  Cosign Needed" +
                                                 " on page " + pageNumber.ToString() + " - COSIGN NEEDED");

                        return(true);
                    }
                }
            }

            // LOGGING
            global_log_file_sw.Write(" - BAD");

            return(false);
        }
        public string GetColumnWiseTextFromPDFFile(string filepath)
        {
            StringBuilder text = new StringBuilder();

            if (File.Exists(filepath))
            {
                PdfReader reader = new PdfReader(filepath);

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

                    string currenttext = PdfTextExtractor.GetTextFromPage(reader, i, strategy);
                    currenttext = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currenttext)));
                    text.Append(currenttext);
                }
                reader.Close();
            }

            return(text.ToString());
        }
 public string ReadData(string PdfFilePath)
 {
     if (!File.Exists(PdfFilePath))
     {
         throw new FileNotFoundException(PdfFilePath);
     }
     using (PdfReader reader = new PdfReader(PdfFilePath))
     {
         StringBuilder           sb       = new StringBuilder();
         ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
         for (int page = 0; page < reader.NumberOfPages; page++)
         {
             string text = PdfTextExtractor.GetTextFromPage(reader, page + 1, strategy);
             if (!string.IsNullOrWhiteSpace(text))
             {
                 sb.Append(Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(text))));
             }
         }
         return(sb.ToString());
     }
 }
Example #12
0
        public static string ProcessPDF(string path)
        {
            string    input  = "";
            PdfReader reader = new PdfReader(path);
            LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();

            for (int p = 1; p < reader.NumberOfPages; p++)
            {
                string page = PdfTextExtractor.GetTextFromPage(reader, p, strategy);

                string[] lines = page.Split('\n');

                foreach (string line in lines)
                {
                    input += "|" + line;
                }
            }

            reader.Close();
            return(input);
        }
Example #13
0
        /// <summary>
        /// ////////////////////////// Для сохранения при выходе ...КОНЕЦ
        /// </summary>
        ///

        /// <summary>
        /// ////////////////////////// Для экстрактора pdf файлов НАЧАЛО...
        /// </summary>
        public void ParsePdf(string fileName)
        {
            string text = "";

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException(fileName);
            }

            PdfReader reader = new PdfReader(fileName);

            StringBuilder sb = new StringBuilder();

            //ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

            for (int page = 0; page < reader.NumberOfPages; page++)
            {
                richTextBox1.Text += PdfTextExtractor.GetTextFromPage(reader, page + 1);
            }
            //richTextBox1.Text = text;
        }
Example #14
0
        private List <int> ReadPdfFile(string fileName, String searthText)
        {
            List <int> pages = new List <int>();

            if (File.Exists(fileName))
            {
                PdfReader pdfReader = new PdfReader(fileName);
                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

                    string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                    if (currentPageText.Contains(searthText))
                    {
                        pages.Add(page);
                    }
                }
                pdfReader.Close();
            }
            return(pages);
        }
Example #15
0
        protected override void GetData()
        {
            string lPath = System.IO.Path.Combine(_analizerData.Settings.Directory, $"{_analizerData.Settings.SourceFileName}{_format}");

            try
            {
                using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(lPath)))
                {
                    for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
                    {
                        PdfPage page = pdfDoc.GetPage(i);
                        _analizerData.Data.Append(PdfTextExtractor.GetTextFromPage(page));
                    }
                }
            }
            catch (Exception)
            {
                //Log here
                _analizerData.Success = false;
            }
        }
Example #16
0
        private async static Task <StringBuilder> ReadPdfFile(string filePath)
        {
            var pdfText = new StringBuilder();

            using (var pdfReader = new PdfReader(filePath))
            {
                for (int page = 1; page < pdfReader.NumberOfPages; page++)
                {
                    try
                    {
                        ITextExtractionStrategy pdfExtractor = new SimpleTextExtractionStrategy();
                        var text = PdfTextExtractor.GetTextFromPage(pdfReader, page, pdfExtractor);
                        pdfText.Append(text);
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            return(await Task.FromResult(pdfText));
        }
        /// <summary>
        /// Get all page numbers that contains a string
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="searchText"></param>
        /// <param name="garetelistPages"></param>
        /// <returns>List of page numbers</returns>
        private static List <int> GetPagesByString(string fileName, String searchText, List <int> garetelistPages)
        {
            List <int> pages = new List <int>();

            if (File.Exists(fileName))
            {
                PdfReader pdfReader = new PdfReader(fileName);
                foreach (int page in garetelistPages)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

                    string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                    if (currentPageText.Contains(searchText))
                    {
                        pages.Add(page);
                    }
                }
                pdfReader.Close();
            }
            return(pages);
        }
Example #18
0
        //pathToFile should be the absolute or relative path to the pdf file with Filename.pdf
        //for example - D://test//Test.pdf
        public static string GetAllTextFromPDF(string pathToFile)
        {
            try
            {
                StringBuilder text = new StringBuilder();
                using (PdfReader reader = new PdfReader(pathToFile))
                {
                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                    }
                }

                return(text.ToString());
            }
            catch (Exception e)
            {
                LogHelper.LogException(e);
                throw;
            }
        }
Example #19
0
        private bool Serach(string pdfData, string searchtext)
        {
            byte[]    bytes  = Convert.FromBase64String(pdfData);
            PdfReader reader = new PdfReader(bytes);
            string    text   = string.Empty;

            for (int page = 1; page <= reader.NumberOfPages; page++)
            {
                text += PdfTextExtractor.GetTextFromPage(reader, page);
            }
            reader.Close();

            if (text.Contains(searchtext))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Get all page numbers that contains Geräteliste
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns>List of page numbers</returns>
        public static List <int> GetGaretelistePages(string fileName)
        {
            List <int> pages = new List <int>();

            if (File.Exists(fileName))
            {
                PdfReader pdfReader = new PdfReader(fileName);

                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                    string currentPageText           = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                    if (currentPageText.Contains("Geräteliste"))
                    {
                        pages.Add(page);
                    }
                }
                pdfReader.Close();
            }
            return(pages);
        }
Example #21
0
        public static string ReadPdfFile(string fileName)
        {
            StringBuilder text = new StringBuilder();

            if (File.Exists(fileName))
            {
                PdfReader pdfReader = new PdfReader(fileName);

                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    // Todo: Try LocationTextExtractionStrategy instead, or see about overriding SimpleTextExtractionStrategy() with different space between characters.
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                    string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                    text.Append(currentText);
                }
                pdfReader.Close();
            }
            return(text.ToString());
        }
Example #22
0
        static private string GetTextFromPDF(string fname)
        {
            StringBuilder text = new StringBuilder();

            try {
                using (PdfReader reader = new PdfReader(fname))
                {
                    for (int i = 1; i <= reader.NumberOfPages; i++)
                    {
                        text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error on pdf open {0}", e);
                fileopen = false;
            }

            return(text.ToString());
        }
Example #23
0
        private static string ConvertPDFToText(byte[] bytes)
        {
            var sb = new StringBuilder();

            try
            {
                var reader        = new PdfReader(bytes);
                var numberOfPages = reader.NumberOfPages;

                for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
                {
                    sb.Append(PdfTextExtractor.GetTextFromPage(reader, currentPageIndex));
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }

            return(sb.ToString());
        }
Example #24
0
        public static string ExtractTextFromPdf(string path)
        {
            ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();

            using (PdfReader reader = new PdfReader(path))
            {
                StringBuilder text = new StringBuilder();

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    string   thePage  = PdfTextExtractor.GetTextFromPage(reader, i, its);
                    string[] theLines = thePage.Split('\n');
                    foreach (var theLine in theLines)
                    {
                        text.AppendLine(theLine);
                    }
                }

                return(text.ToString());
            }
        }
Example #25
0
 public void iTextSharp(BackgroundWorker backgroundWorker, string path)
 {
     using (PdfReader reader = new PdfReader(path))
     {
         mpath = path;
         StringBuilder builder = new StringBuilder();
         for (int i = 1; i <= reader.NumberOfPages; i++)
         {
             if (!backgroundWorker.CancellationPending)
             {
                 backgroundWorker.ReportProgress((i * 100) / reader.NumberOfPages);
                 //bulider.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                 ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
                 string s = PdfTextExtractor.GetTextFromPage(reader, i, its);
                 //s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
                 builder.Append(s);
             }
         }
         MainForm.finaltext = builder.ToString();
     }
 }
Example #26
0
        /// <summary>
        /// Parse pdf to text string
        /// </summary>
        /// <param name="data">pdf data stream</param>
        public void ParsePdf(byte[] data)
        {
            this.pacNetBalanceRows = new List <PacNetBalanceRow>();
            var reader = new PdfReader(data);

            for (int page = 1; page <= reader.NumberOfPages; page++)
            {
                string   text  = PdfTextExtractor.GetTextFromPage(reader, page);
                string[] lines = text.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);

                foreach (string line in lines)
                {
                    HandleLine(line);
                }
            }             // for

            reader.Close();


            PacNetBalance.PopulateList(date, openingBalance, closingBalance, credits, debits, this.pacNetBalanceRows, this.loginAddress, this.loginPassword);
        }         // ParsePdf
        public static UserData ClasifySheet(string PdfSheetPath, IEnumerable <UserData> Users)
        {
            PdfReader pdfReader = new PdfReader(PdfSheetPath);
            ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
            string pdf_text = PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy);

            pdf_text = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(pdf_text)));
            Match match = expression_regular.Match(pdf_text);

            if (match.Success)
            {
                foreach (UserData currentUser in Users)
                {
                    if (currentUser.Pattern == match.Groups[1].Value)
                    {
                        return(currentUser);
                    }
                }
            }
            return(null);
        }
Example #28
0
        //static degiskeni ile ayrilastirilmis sayfalar metodu sadece tek bir sefer cagirarak bulunur

        static String extractText(string path)
        {
            StringBuilder text = new StringBuilder();

            using (PdfReader reader = new PdfReader(path))
            {
                pages = new string[reader.NumberOfPages];

                StringBuilder page = new StringBuilder();
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    page.Clear();
                    page.Append(PdfTextExtractor.GetTextFromPage(reader, i));

                    text.Append(page.ToString());
                    pages[i - 1] = page.ToString();
                }
            }

            return(text.ToString());
        }
Example #29
0
        public static string ReadDATAFromPDF(string fileName, string path)
        {
            StringBuilder sb = new StringBuilder();

            if (File.Exists(fileName))
            {
                PdfReader reader = new PdfReader(fileName);
                Rectangle rect   = new Rectangle(0, 0, 415, 775);

                RenderFilter[]          filter = { new RegionTextRenderFilter(rect) };
                ITextExtractionStrategy strategy;

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
                    sb.AppendLine(PdfTextExtractor.GetTextFromPage(reader, i, strategy));
                }
            }
            MakeTempFile(sb, path);
            return(sb.ToString());
        }
Example #30
0
 public static string[] OpenPDFFile(string path)
 {
     try
     {
         using (PdfReader reader = new PdfReader(path))
         {
             string[] page = new string[reader.NumberOfPages + 1];
             for (int i = 1; i <= reader.NumberOfPages; i++)
             {
                 //парсим книгу постранично
                 page[i] = PdfTextExtractor.GetTextFromPage(reader, i);
             }
             return(page);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("The file could not be read\n" + ex.Message);
         return(new string[] {});
     }
 }
Example #31
0
        public string ReadPdfFile(string fileName)
        {
            StringBuilder text = new StringBuilder();

            if (File.Exists(fileName))
            {
                Label1.Text = "Continúa desde donde lo dejaste...";
                PdfReader pdfReader = new PdfReader(fileName);

                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                    string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                    text.Append(currentText);
                }
                pdfReader.Close();
            }
            return(text.ToString());
        }
Example #32
0
        public static string GetExtract(BinaryData binaryData, Node node)
        {
            if (binaryData == null)
                return string.Empty;
            var fname = binaryData.FileName;
            if (fname == null)
                return string.Empty;
            var ext = fname.Extension;
            if (String.IsNullOrEmpty(ext))
                return string.Empty;

            ITextExtractor extractor = null;
            var result = string.Empty;
            switch (ext.ToLower())
            {
                case "contenttype":
                case "xml": extractor = new XmlTextExtractor(); break;
                case "doc": extractor = new DocTextExtractor(); break;
                case "xls": extractor = new XlsTextExtractor(); break;
                case "pdf": extractor = new PdfTextExtractor(); break;
                case "docx": extractor = new DocxTextExtractor(); break;
                case "xlsx": extractor = new XlsxTextExtractor(); break;
                case "pptx": extractor = new PptxTextExtractor(); break;
                case "txt": extractor = new PlainTextExtractor(); break;
                default:
                    return String.Empty;
            }

            var stream = binaryData.GetStream();
            if (stream == null)
                return String.Empty;
            if (stream.Length == 0)
                return String.Empty;

            try
            {
                ////-- sync
                //result = extractor.Extract(stream);

                //-- async
                Action<TimeboxedActivity> timeboxedFunctionCall = activity =>
                {
                    var x = (Stream)activity.InArgument;
                    var extract = extractor.Extract(x);
                    activity.OutArgument = extract;
                };

                var act = new TimeboxedActivity();
                act.InArgument = stream;
                act.Activity = timeboxedFunctionCall;
                act.Context = HttpContext.Current;

                var finishedWithinTime = act.ExecuteAndWait(Repository.TextExtractTimeout * 1000);
                if (!finishedWithinTime)
                {
                    act.Abort();
                    var msg = String.Format("Text extracting timeout. Version: {0}, path: {1}", node.Version, node.Path);
                    Logger.WriteWarning(msg);
                    return String.Empty;
                }
                else if (act.ExecutionException != null)
                {
                    WriteError(act.ExecutionException, node);
                }
                else
                {
                    result = (string)act.OutArgument;
                }
            }
            catch (Exception e)
            {
                WriteError(e, node);
            }

            if (String.IsNullOrEmpty(result))
            {
                var format = @"Couldn't extract text. VersionId: {0}, path: '{1}' ";
                var inf = String.Format(CultureInfo.InvariantCulture, format, node.VersionId, node.Path);
                Logger.WriteWarning(inf);
            }

            result = result.Replace('\0', '.');
            return result;
        }
Example #33
0
        public static string GetExtract(Stream stream, string fileName, out string errorMessage)
        {
            if (stream == null)
            {
                errorMessage = null;
                return String.Empty;
            }
            if (stream.Length == 0)
            {
                errorMessage = null;
                return String.Empty;
            }
            if (String.IsNullOrEmpty(fileName))
            {
                errorMessage = "Cannot resolve a TextExtractor if FileName is null or empty";
                return String.Empty;
            }
            var extension = Path.GetExtension(fileName);
            if (String.IsNullOrEmpty(extension))
            {
                errorMessage = "Cannot resolve a TextExtractor if FileName's extension is null or empty";
                return string.Empty;
            }
            extension = extension.TrimStart('.');
            if (extension.Length == 0)
            {
                errorMessage = "Cannot resolve a TextExtractor if FileName's extension is empty";
                return string.Empty;
            }
            extension = extension.ToLower();
            if (extension == "txt")
            {
                errorMessage = null;
                return SenseNet.ContentRepository.Tools.GetStreamString(stream);
            }

            ITextExtractor extractor = null;
            var result = string.Empty;
            switch (extension)
            {
                case "contenttype":
                case "xml": extractor = new XmlTextExtractor(); break;
                case "doc": extractor = new DocTextExtractor(); break;
                case "xls": extractor = new XlsTextExtractor(); break;
                case "pdf": extractor = new PdfTextExtractor(); break;
                case "docx": extractor = new DocxTextExtractor(); break;
                case "xlsx": extractor = new XlsxTextExtractor(); break;
                case "pptx": extractor = new PptxTextExtractor(); break;
                case "txt": extractor = new PlainTextExtractor(); break;
                default:
                    errorMessage = String.Format("Cannot resolve a TextExtractor for this extension: '{0}'", extension);
                    return String.Empty;
            }

            try
            {
                //-- sync
                result = extractor.Extract(stream);
                errorMessage = null;

                ////-- async
                /*
                Action<TimeboxedActivity> timeboxedFunctionCall = activity =>
                {
                    var x = (Stream)activity.InArgument;
                    var extract = extractor.Extract(x);
                    activity.OutArgument = extract;
                };

                var act = new TimeboxedActivity();
                act.InArgument = stream;
                act.Activity = timeboxedFunctionCall;

                var finishedWithinTime = act.ExecuteAndWait(5000);
                if (!finishedWithinTime)
                {
                    act.Abort();
                    errorMessage = String.Format("Text extracting timeout. path: {0}", fileName);
                    return String.Empty;
                }
                else if (act.ExecutionException != null)
                {
                    errorMessage = String.Format("An error occured during extracting text. Path: {0}. Message: {1}", fileName, act.ExecutionException.Message);
                }
                else
                {
                    result = (string)act.OutArgument;
                    errorMessage = null;
                }
                */
            }
            catch (Exception e)
            {
                errorMessage = String.Format("An error occured during extracting text. Path: {0}. Message: {1}", fileName, e.Message);
            }

            if (String.IsNullOrEmpty(result))
            {
                var format = @"Couldn't extract text. FileName: '{0}' ";
                errorMessage = String.Format(CultureInfo.InvariantCulture, format, fileName);
            }

            result = result.Replace('\0', '.');
            return result;
        }