60 lines
1.9 KiB
PHP
60 lines
1.9 KiB
PHP
<?php
|
|
namespace Contabilidad\Common\Service;
|
|
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
|
|
use thiagoalessio\TesseractOCR\TesseractOCR;
|
|
use Contabilidad\Common\Concept\DocumentHandler;
|
|
|
|
class XlsHandler extends DocumentHandler {
|
|
public function load(): ?array {
|
|
$folder = $this->folder;
|
|
$files = new \DirectoryIterator($folder);
|
|
$output = [];
|
|
foreach ($files as $file) {
|
|
if ($file->isDir() or $file->getExtension() != 'xls') {
|
|
continue;
|
|
}
|
|
$reader = IOFactory::createReader(ucfirst($file->getExtension()));
|
|
$xls = $reader->load($file->getRealPath());
|
|
$data = [];
|
|
$bank = 'unknown';
|
|
for ($s = 0; $s < $xls->getSheetCount(); $s ++) {
|
|
$sheet = $xls->getSheet($s);
|
|
foreach ($sheet->getRowIterator() as $row) {
|
|
$r = [];
|
|
foreach ($row->getCellIterator() as $cell) {
|
|
$r []= $cell->getValue();
|
|
}
|
|
$data []= $r;
|
|
}
|
|
foreach ($sheet->getDrawingCollection() as $drawing) {
|
|
if ($drawing instanceof MemoryDrawing) {
|
|
ob_start();
|
|
call_user_func(
|
|
$drawing->getRenderingFunction(),
|
|
$drawing->getImageResource()
|
|
);
|
|
$imageContents = ob_get_contents();
|
|
$size = ob_get_length();
|
|
ob_end_clean();
|
|
$ocr = new TesseractOCR();
|
|
$ocr->imageData($imageContents, $size);
|
|
$image = $ocr->run();
|
|
if (str_contains($image, 'BICE')) {
|
|
$bank = 'BICE';
|
|
}
|
|
if (str_contains($image, 'Scotiabank')) {
|
|
$bank = 'Scotiabank';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$output []= ['bank' => $bank, 'filename' => $file->getBasename(), 'data' => $data];
|
|
}
|
|
return $this->build($output);
|
|
}
|
|
protected function build(array $data): ?array {
|
|
return $data;
|
|
}
|
|
} |