import os import zipfile import tempfile import pandas as pd from read_image import read_datamatrix_zxing, extract_barcodes_from_pdf import click import render_eps def extract_eps_from_zip(zip_path: str) -> list: """ Распаковывает zip-архив, ищет eps-файлы, прогоняет их через read_datamatrix_zxing. Возвращает список кортежей (текст, base64). """ results = [] # Используем временную директорию для безопасного извлечения файлов with tempfile.TemporaryDirectory() as tmpdir: with zipfile.ZipFile(zip_path, 'r') as zf: # Отбираем только файлы с расширением .eps (независимо от регистра) eps_files = [f for f in zf.namelist() if f.lower().endswith('.eps')] for eps_file in eps_files: # Извлекаем конкретный файл во временную директорию extracted_path = zf.extract(eps_file, path=tmpdir) # Прогоняем через функцию чтения code_data = read_datamatrix_zxing(extracted_path) # Убеждаемся, что код найден и вернулся ожидаемый кортеж if code_data and isinstance(code_data, tuple): results.append(code_data) return results def extract_dm_from_pdf(pdf_path: str) -> list: """ Использует extract_barcodes_from_pdf для получения кодов из многостраничного PDF. Возвращает список кортежей (текст, base64). """ results = [] # Получаем список словарей с информацией о кодах barcodes_info = extract_barcodes_from_pdf(pdf_path) for info in barcodes_info: # Извлекаем текст и base64 по ключам text_val = info.get("text", "") base64_val = info.get("base64", "") results.append((text_val, base64_val)) return results def save_to_excel(data: list, output_path: str): """ Принимает список кортежей (текст, base64) и сохраняет в XLSX файл. """ if not data: print("Нет данных для сохранения в Excel.") return # Формируем DataFrame из списка кортежей df = pd.DataFrame(data, columns=["Текст", "Base64"]) # Сохраняем в XLSX, исключая колонку индексов df.to_excel(output_path, index=False, engine='openpyxl') print(f"Данные успешно сохранены в {output_path}") if __name__ == "__main__": # Тестовый пример оркестрации: base_dir = os.path.dirname(os.path.abspath(__file__)) zip_path = "data/0109 черный xxl 720 шт. d46349f7-148a-4301-b6b5-f9a3c70fdf19_begin_offset_2000_number_of_codes_720.zip" #zip_data = extract_eps_from_zip(zip_path) pdf_path = 'data/0109, цвет синий, р.L 10шт_b3ba8577-7874-4dfa-a091-e6953fbe0ca7_gtin_04639970975214_quantity_10.pdf' pdf_data = extract_dm_from_pdf(pdf_path)