private ExtractOption CombineOptions(ExtractOption[] options)
        {
            ExtractOption extractOption = 0;

            if (options != null && options.Length != 0)
            {
                ExtractOption[] extractOptionArray = options;
                extractOption = extractOptionArray.Aggregate(extractOption, (current, t) => current | t);
            }
            return(extractOption);
        }
Example #2
0
        /// <summary>
        /// Extracts all entries to directory.
        /// </summary>
        /// <param name="outputDirectory">Directory to extract files.</param>
        /// <param name="options">Specifies extracting options. </param>
        public void ExtractFiles(string outputDirectory, ExtractOption options)
        {
            var entries = _vdfsReader.ReadEntries(true).ToArray();

            if (options == ExtractOption.Hierarchy)
            {
                var tree = new VdfsEntriesTreeGenerator(entries).Generate();

                saveFiles(tree, outputDirectory);
            }
            else
            {
                saveFiles(entries, outputDirectory);
            }
        }
        public OperateResult <ExtractedResult> Extract(string path, ExtractOption[] options)
        {
            OperateResult <ExtractedResult> operateResult = new OperateResult <ExtractedResult>();
            ExtractOption extractOption = CombineOptions(options);
            string        extension     = Path.GetExtension(path);
            ICollection <DocumentExtractor> extractors = ExtractorFactory.GetExtractors(extension);

            if (extractors == null || extractors.Count == 0)
            {
                operateResult.Status      = OperateStatus.Failure;
                operateResult.Description = "没有对应的处理程序";
                return(operateResult);
            }
            bool flag = false;

            if (!File.Exists(path))
            {
                operateResult.Status      = OperateStatus.Failure;
                operateResult.Description = string.Concat("不存在该文件:", path);
                return(operateResult);
            }
            byte[] numArray = File.ReadAllBytes(path);
            try
            {
                foreach (DocumentExtractor extractor in extractors)
                {
                    operateResult.Data = extractor.Extract(extension, numArray, extractOption);
                    if (operateResult.Data == null)
                    {
                        continue;
                    }
                    flag = true;
                    break;
                }
            }
            catch (Exception exception)
            {
                operateResult.Status      = OperateStatus.Failure;
                operateResult.Description = string.Concat("抽取出错:", exception.Message, Environment.NewLine, exception.StackTrace);
                LoggerWrapper.Logger.Error("ExtractText", exception);
            }
            if (!flag)
            {
                operateResult.Status      = OperateStatus.Failure;
                operateResult.Description = "抽取出错";
            }
            return(operateResult);
        }
Example #4
0
        public ExtractedResult Extract(string extensionName, byte[] data, ExtractOption extractOptions)
        {
            if (!CanBeExtracted(extensionName, data))
            {
                return(null);
            }
            ExtractedResult extractedResult1 = new ExtractedResult();

            if ((extractOptions & ExtractOption.Text) == ExtractOption.Text)
            {
                try
                {
                    extractedResult1.Text = ExtractText(extensionName, data);
                    if ((extractOptions & ExtractOption.Image) == ExtractOption.Image)
                    {
                        try
                        {
                            extractedResult1.Images = ExtractAndCompressImages(extensionName, data);
                        }
                        catch (Exception exception)
                        {
                            LoggerWrapper.Logger.Error("抽取图片", exception);
                        }
                    }
                    ExtractedFilterFactory.Filter(extractedResult1);
                    return(extractedResult1);
                }
                catch (Exception exception1)
                {
                    LoggerWrapper.Logger.Error("抽取文本", exception1);
                }
                return(null);
            }
            if ((extractOptions & ExtractOption.Image) == ExtractOption.Image)
            {
                try
                {
                    extractedResult1.Images = ExtractAndCompressImages(extensionName, data);
                }
                catch (Exception exception)
                {
                    LoggerWrapper.Logger.Error("抽取图片", exception);
                }
            }
            ExtractedFilterFactory.Filter(extractedResult1);
            return(extractedResult1);
        }