Ejemplo n.º 1
0
        public async Task Scan(bool imageScan = false, string range = null, bool simulate = false)
        {
            QuestionsParameters parameters = GetParameters();

            if (parameters == null)
            {
                Trace.WriteLine($"parameters are not defined");
                return;
            }
            if (parameters.PageRange == null)
            {
                Trace.WriteLine($"page range is not defined");
                return;
            }
            if (parameters.PageColumn == 1 && !imageScan)
            {
                await ScanPdf(parameters, range, simulate);
            }
            else
            {
                if (!parameters.ImagesExtracted)
                {
                    ExtractImagesFromPdf(parameters);
                }
                await ScanImages(parameters, range, simulate);
            }
        }
Ejemplo n.º 2
0
        public void SetParameters(QuestionsParameters parameters)
        {
            string file = GetParametersFile();

            Trace.WriteLine($"save parameters to \"{file}\"");
            parameters.zSave(file, jsonIndent: true);
        }
Ejemplo n.º 3
0
        public void ExtractImagesFromPdf()
        {
            QuestionsParameters parameters = GetParameters();

            if (parameters == null)
            {
                Trace.WriteLine($"parameters are not defined");
                return;
            }
            if (parameters.PageRange == null)
            {
                Trace.WriteLine($"page range is not defined");
                return;
            }
            ExtractImagesFromPdf(parameters);
        }
Ejemplo n.º 4
0
        private IEnumerable <ImageColumn> GetScanImages(QuestionsParameters parameters, string imageFile)
        {
            if (parameters.PageColumn == 1)
            {
                yield return new ImageColumn {
                           ImageFile = imageFile, Column = 0
                }
            }
            ;
            else if (parameters.PageColumn == 2)
            {
                string imageColumnFile1 = GetIndexedImageFile(imageFile, 1);

                string imageColumnFile2 = GetIndexedImageFile(imageFile, 2);
                if (!zFile.Exists(imageColumnFile1) || !zFile.Exists(imageColumnFile2))
                {
                    CreateImagesColumn(imageFile, parameters.PageRotate, imageColumnFile1, imageColumnFile2);
                }

                if (_joinImagesColumn)
                {
                    string joinedImageFile = GetIndexedImageFile(imageFile, 3);
                    if (!zFile.Exists(joinedImageFile))
                    {
                        CreateJoinedImageColumn(imageColumnFile1, imageColumnFile2, joinedImageFile);
                    }
                    yield return(new ImageColumn {
                        ImageFile = joinedImageFile, Column = 0
                    });
                }
                else
                {
                    yield return(new ImageColumn {
                        ImageFile = imageColumnFile1, Column = 1
                    });

                    yield return(new ImageColumn {
                        ImageFile = imageColumnFile2, Column = 2
                    });
                }
            }
            else
            {
                throw new PBException($"wrong page column {parameters.PageColumn}");
            }
        }
Ejemplo n.º 5
0
        private async Task ScanPdf(QuestionsParameters parameters, string range, bool simulate = false)
        {
            string pdfFile = GetPdfFile();

            if (!zFile.Exists(pdfFile))
            {
                Trace.WriteLine($"pdf file not found \"{pdfFile}\"");
                return;
            }
            if (range == null)
            {
                range = parameters.PageRange;
            }
            Trace.WriteLine($"scan pdf \"{pdfFile}\" range \"{range}\"");
            //OcrWebService ocrWebService = CreateOcrWebService();
            ScanManager scanManager = CreateScanManager();

            //OcrRequest request = CreateOcrRequest();
            //request.DocumentFile = pdfFile;
            //request.PageRange = range;
            if (!simulate)
            {
                await scanManager.ScanPdf(pdfFile, range, zPath.Combine(GetScanDirectory(), "scan"));

                //OcrResult<OcrProcessDocumentResponse> response = await ocrWebService.ProcessDocument(request);
                //if (response.Success)
                //{
                //    Trace.WriteLine($"scan ok {response.Data.ProcessedPages} pages - remainder {response.Data.AvailablePages} pages");
                //    string directory = GetScanDirectory();
                //    zdir.CreateDirectory(directory);
                //    string scanFile = zPath.Combine(directory, "scan");
                //    Trace.WriteLine($"save scan to \"{scanFile}\"");
                //    await ocrWebService.DownloadResultDocuments(response.Data, scanFile);
                //}
                //else
                //    Trace.WriteLine($"scan error code {response.StatusCode}");
            }
            else
            {
                Trace.WriteLine($"simulate scan pdf \"{pdfFile}\" range \"{range}\"");
            }
        }
Ejemplo n.º 6
0
        private void ExtractImagesFromPdf(QuestionsParameters parameters)
        {
            string pdfFile = GetPdfFile();

            //if (range == null)
            //    range = parameters.PageRange;
            Trace.WriteLine($"extract images from pdf \"{pdfFile}\" range \"{parameters.PageRange}\"");
            string directory = GetImagesDirectory();

            zdir.CreateDirectory(directory);
            //zfile.DeleteFiles(directory, "*.jpeg");
            DeleteImageFiles(directory);
            //iText.ExtractImages(pdfFile,
            //    (image, page, imageIndex) => image.Save(zPath.Combine(directory, $"page-{page:000}{(imageIndex != 1 ? $"-{imageIndex:00}" : "")}.jpeg"), ImageFormat.Jpeg),
            //    range: range);

            foreach (PdfImage image in iText7.EnumImages(pdfFile, parameters.PageRange))
            {
                iText7.SaveImage(image.Image, zPath.Combine(directory, $"page-{image.PageNumber:000}{(image.ImageNumber != 1 ? $"-{image.ImageNumber:00}" : "")}"));
            }
            parameters.ImagesExtracted = true;
            SetParameters(parameters);
        }
Ejemplo n.º 7
0
        private async Task ScanImages(QuestionsParameters parameters, string range, bool simulate = false)
        {
            string directory = GetImagesDirectory();

            if (!zDirectory.Exists(directory))
            {
                Trace.WriteLine($"images directory not found \"{directory}\"");
                return;
            }
            if (range == null)
            {
                range = parameters.PageRange;
            }
            Trace.WriteLine($"scan images \"{directory}\" range \"{range}\"");
            //OcrWebService ocrWebService = CreateOcrWebService();
            ScanManager scanManager = CreateScanManager();

            //OcrRequest request = CreateOcrRequest();
            foreach (int page in zstr.EnumRange(range))
            {
                string imageBaseFile = zPath.Combine(directory, $"page-{page:000}");
                string imageFile     = FindImageFile(imageBaseFile);
                if (!zFile.Exists(imageFile))
                {
                    Trace.WriteLine($"image not found \"{imageBaseFile}\"");
                    return;
                }
                //request.DocumentFile = imageFile;
                //request.Zone = GetScanZone(parameters, imageFile);
                //if (!simulate)
                //{
                //    Trace.WriteLine($"scan image \"{imageFile}\"");
                //    await scanManager.ScanImage(imageFile, zPath.Combine(GetScanDirectory(), $"scan-page-{page:000}"));
                //    //OcrResult<OcrProcessDocumentResponse> response = await ocrWebService.ProcessDocument(request);
                //    //if (response.Success)
                //    //{
                //    //    string scanDirectory = GetScanDirectory();
                //    //    zdir.CreateDirectory(scanDirectory);
                //    //    string scanFile = zPath.Combine(scanDirectory, $"scan-page-{page:000}");
                //    //    Trace.WriteLine($"save scan to \"{scanFile}\"");
                //    //    await ocrWebService.DownloadResultDocuments(response.Data, scanFile);
                //    //}
                //}
                //else
                //{
                //    //Trace.WriteLine("OcrRequest :");
                //    //request.zTraceJson();
                //    Trace.WriteLine($"simulate scan image \"{imageFile}\"");
                //}
                foreach (ImageColumn imageColumn in GetScanImages(parameters, imageFile))
                {
                    string scanFile = zPath.Combine(GetScanDirectory(), $"scan-page-{page:000}");
                    if (imageColumn.Column != 0)
                    {
                        scanFile += $"-{imageColumn.Column:00}";
                    }
                    if (!simulate)
                    {
                        Trace.WriteLine($"scan image \"{imageColumn.ImageFile}\" to \"{scanFile}\"");
                        await scanManager.ScanImage(imageColumn.ImageFile, scanFile);
                    }
                    else
                    {
                        Trace.WriteLine($"simulate scan image \"{imageColumn.ImageFile}\" to \"{scanFile}\"");
                    }
                }
            }
        }