docs(office): add section 19 to roadmap and changelog for two-phase handwritten ocr pipeline
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
===============================================================================
|
||||
FILE: services/office/service.py
|
||||
PROJECT: SCUD Orion AI (Office Domain)
|
||||
ROLE: Единый фасад офисного модуля для вызова из API и фоновых задач.
|
||||
===============================================================================
|
||||
"""
|
||||
|
||||
import os
|
||||
import uuid
|
||||
import logging
|
||||
from typing import Dict, Any
|
||||
|
||||
from config import BASE_DIR
|
||||
from .document_extractor import process_pdf_full
|
||||
from .word_builder import build_docx_from_ocr
|
||||
|
||||
logger = logging.getLogger("OFFICE_SERVICE")
|
||||
|
||||
OFFICE_OUTPUT_DIR = os.path.join(BASE_DIR, "output", "web", "office")
|
||||
os.makedirs(OFFICE_OUTPUT_DIR, exist_ok=True)
|
||||
|
||||
|
||||
def convert_pdf_to_word_service(file_path: str, original_filename: str) -> Dict[str, Any]:
|
||||
"""
|
||||
Полный цикл: Постраничный OCR скана PDF -> Сборка документа DOCX -> Ссылка на скачивание.
|
||||
"""
|
||||
session_id = str(uuid.uuid4())[:8]
|
||||
base_name = os.path.splitext(os.path.basename(original_filename))[0]
|
||||
out_docx_name = f"{base_name}_распознан.docx"
|
||||
|
||||
target_dir = os.path.join(OFFICE_OUTPUT_DIR, session_id)
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
out_docx_path = os.path.join(target_dir, out_docx_name)
|
||||
|
||||
# 1. Постраничный парсинг всех страниц
|
||||
pages = process_pdf_full(file_path)
|
||||
|
||||
# 2. Сборка Word-документа
|
||||
build_docx_from_ocr(pages, out_docx_path, doc_title=base_name)
|
||||
|
||||
# 3. Краткое превью для окна чата
|
||||
preview_sample = pages[0]["text"][:600] if pages else "Документ распознан."
|
||||
|
||||
download_url = f"/api/v1/files/download/office/{session_id}/{out_docx_name}"
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"total_pages": len(pages),
|
||||
"filename": out_docx_name,
|
||||
"filepath": out_docx_path,
|
||||
"download_url": download_url,
|
||||
"preview_text": preview_sample,
|
||||
"message": f"Документ успешно распознан целиком ({len(pages)} стр.) и собран в MS Word."
|
||||
}
|
||||
Reference in New Issue
Block a user