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); } }
public void SetParameters(QuestionsParameters parameters) { string file = GetParametersFile(); Trace.WriteLine($"save parameters to \"{file}\""); parameters.zSave(file, jsonIndent: true); }
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); }
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}"); } }
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}\""); } }
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); }
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}\""); } } } }