diff --git a/djvulibre.cmd b/djvulibre.cmd index 0f7b46f..5c706cb 100644 --- a/djvulibre.cmd +++ b/djvulibre.cmd @@ -1,58 +1,45 @@ @echo off setlocal enabledelayedexpansion -:: Конфигурация +:: Установка переменных set "ROOT_DIR=%~dp0" set "WGET=%ROOT_DIR%program\wget.exe" -set "TARGET_DIR=%ROOT_DIR%djvulibre" -set "DJVU_URL=https://sourceforge.net/projects/djvu/files/DjVuLibre_Windows/3.5.28%%2B4.12/DjVuLibre-3.5.28_DjView-4.12_Setup.exe/download" -set "ZIP_FILE=%TARGET_DIR%\djvulibre.zip" +set "URL=https://sourceforge.net/projects/djvu/files/DjVuLibre_Windows/3.5.28%%2B4.12/DjVuLibre-3.5.28_DjView-4.12_Setup.exe/download" +set "INSTALLER=DjVuLibre-3.5.28_DjView-4.12_Setup.exe" +set "EXTRACT_DIR=%ROOT_DIR%temp" +set "TARGET_DIR=program\djvu" +set "Zip=%ROOT_DIR%program\7z.exe" -:: 1. Проверка wget -if not exist "%WGET%" ( - echo Ошибка: wget.exe не найден в %ROOT_DIR%program\ - pause + +:: Скачивание установщика +echo Загрузка установщика... +"%WGET%" --no-check-certificate -O "%INSTALLER%" "%URL%" +if errorlevel 1 ( + echo Ошибка загрузки файла exit /b 1 ) -:: 2. Подготовка папки -echo [1/4] Подготовка папки %TARGET_DIR% -if exist "%TARGET_DIR%" ( - rmdir /s /q "%TARGET_DIR%" >nul 2>&1 -) -mkdir "%TARGET_DIR%" - -:: 3. Загрузка ZIP-архива -echo [2/4] Загрузка ZIP-архива DjVuLibre... -"%WGET%" --no-check-certificate --trust-server-names -O "%ZIP_FILE%" "%DJVU_URL%" -if %ERRORLEVEL% neq 0 ( - echo Ошибка загрузки! - pause +:: Распаковка архива +echo Распаковка архива... +"%Zip%" x -o"%EXTRACT_DIR%" "%INSTALLER%" -y >nul +if errorlevel 1 ( + echo Ошибка распаковки exit /b 1 ) -:: 4. Распаковка архива -echo [3/4] Распаковка архива... -if exist "%SystemRoot%\System32\tar.exe" ( - tar -xf "%ZIP_FILE%" -C "%TARGET_DIR%" >nul 2>&1 -) else ( - echo Ошибка: требуется tar.exe для распаковки - pause - exit /b 1 +:: Создание целевой директории +if not exist "%TARGET_DIR%" mkdir "%TARGET_DIR%" + +:: Поиск и копирование файлов +for %%F in (libz.dll ddjvu.exe libdjvulibre.dll libjpeg.dll libtiff.dll) do ( + echo Копирование %%F... + for /r "%EXTRACT_DIR%" %%I in (%%F) do ( + if exist "%%I" copy /y "%%I" "%TARGET_DIR%\" >nul + ) ) -:: 5. Проверка результата -echo [4/4] Проверка распаковки... -if exist "%TARGET_DIR%\djview.exe" ( - echo ---------------------------------------- - echo Успешно! Портабельная DjVuLibre готова: - echo %TARGET_DIR% - echo ---------------------------------------- - echo Основные программы: - dir /b "%TARGET_DIR%\djview.exe" - dir /b "%TARGET_DIR%\ddjvu.exe" -) else ( - echo Ошибка: распаковка не завершена корректно -) +:: Удаление временных файлов +rmdir /s /q "%EXTRACT_DIR%" +del /q "%INSTALLER%" -pause \ No newline at end of file +echo Операция успешно завершена! \ No newline at end of file diff --git a/program/7z.exe b/program/7z.exe new file mode 100644 index 0000000..19961db --- /dev/null +++ b/program/7z.exe Binary files differ diff --git a/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java b/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java index 9b4caf9..2d96c4c 100644 --- a/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java +++ b/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java @@ -26,13 +26,13 @@ String outputFile = "page_djvu_%d.tiff"; Process process; try { - process = new ProcessBuilder("ddjvu", + process = new ProcessBuilder("program/djvu/ddjvu.exe", "-format=tiff", "-quality=90", "-page=1-6", "-eachpage", djvuFile.getAbsolutePath(), - outputFile).start(); + "images/" + outputFile).start(); int exitCode = process.waitFor(); if (exitCode == 0) { for (int index = 1; index <= 6; index++) { @@ -50,7 +50,6 @@ } catch (InterruptedException | IOException | TesseractException e) { documentInfo.setError(e.getMessage()); } -// } long endTime = System.currentTimeMillis(); documentInfo.setTime(endTime - startTime); return documentInfo; diff --git a/src/main/java/ru/mcs/udk/utils/DocumentUtils.java b/src/main/java/ru/mcs/udk/utils/DocumentUtils.java index ad34cf3..fdf4fea 100644 --- a/src/main/java/ru/mcs/udk/utils/DocumentUtils.java +++ b/src/main/java/ru/mcs/udk/utils/DocumentUtils.java @@ -17,9 +17,8 @@ synchronized (Tesseract.class) { localInstance = instance; if (localInstance == null) { - System.setProperty("TESSDATA_PREFIX", "/windows"); instance = localInstance = new Tesseract(); - instance.setDatapath("windows\\tessdata\\");; + instance.setDatapath("program\\tesseract\\tessdata\\");; instance.setLanguage("rus"); } } @@ -46,8 +45,8 @@ tesseract.setLanguage("rus"); tesseract.setVariable("user_defined_dpi", "300"); // Настройки для маленьких изображений -// tesseract.setPageSegMode(7); // PSM_SINGLE_LINE (распознавание одной строки) -// tesseract.setVariable("tessedit_min_characters", "1"); // Минимальное количество символов + // tesseract.setPageSegMode(7); // PSM_SINGLE_LINE (распознавание одной строки) + // tesseract.setVariable("tessedit_min_characters", "1"); // Минимальное количество символов return tesseract.doOCR(image); } diff --git a/tesseract.bat b/tesseract.bat new file mode 100644 index 0000000..c235bfe --- /dev/null +++ b/tesseract.bat @@ -0,0 +1,23 @@ +@echo off + +:: Пути +set "ROOT_DIR=%~dp0" +set "WGET=%ROOT_DIR%program\wget.exe" +set "TARGET_DIR=%ROOT_DIR%program\tesseract" +set "TESSDATA_DIR=%TARGET_DIR%\tessdata" + +:: 1. Создаем папку windows +if not exist "%TARGET_DIR%" mkdir "%TARGET_DIR%" + +:: 2. Создаем папку для языковых пакетов +if not exist "%TESSDATA_DIR%" mkdir "%TESSDATA_DIR%" + +:: 3. Скачиваем языковые пакеты (ru и en) +echo Загрузка русской языковой модели... +"%WGET%" -O "%TESSDATA_DIR%\rus.traineddata" "https://github.com/tesseract-ocr/tessdata/raw/main/rus.traineddata" + +echo Загрузка английской языковой модели... +"%WGET%" -O "%TESSDATA_DIR%\eng.traineddata" "https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata" + +echo Готово! Портабельная версия создана в: +echo %TARGET_DIR% \ No newline at end of file diff --git a/windows.cmd b/windows.cmd deleted file mode 100644 index be0e376..0000000 --- a/windows.cmd +++ /dev/null @@ -1,33 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -:: Пути -set "ROOT_DIR=%~dp0" -set "WGET=%ROOT_DIR%program\wget.exe" -set "TARGET_DIR=%ROOT_DIR%windows" -set "TESSDATA_DIR=%TARGET_DIR%\tessdata" - -:: 1. Создаем папку windows -if not exist "%TARGET_DIR%" mkdir "%TARGET_DIR%" - -:: 2. Скачиваем Tesseract 5.5.0 -echo Загрузка Tesseract... -"%WGET%" -O "%TARGET_DIR%\tesseract.exe" "https://github.com/tesseract-ocr/tesseract/releases/download/5.5.0/tesseract-ocr-w64-setup-5.5.0.20241111.exe" - -:: 3. Установка Tesseract в портабельном режиме (если требуется) -:: Примечание: Для реальной портабельности используйте ZIP-архив, но здесь пример с установщиком -:: start /wait "" "%TARGET_DIR%\tesseract.exe" /SILENT /DIR="%TARGET_DIR%" - -:: 4. Создаем папку для языковых пакетов -if not exist "%TESSDATA_DIR%" mkdir "%TESSDATA_DIR%" - -:: 5. Скачиваем языковые пакеты (ru и en) -echo Загрузка русской языковой модели... -"%WGET%" -O "%TESSDATA_DIR%\rus.traineddata" "https://github.com/tesseract-ocr/tessdata/raw/main/rus.traineddata" - -echo Загрузка английской языковой модели... -"%WGET%" -O "%TESSDATA_DIR%\eng.traineddata" "https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata" - - -echo Готово! Портабельная версия создана в: -echo %TARGET_DIR% \ No newline at end of file