Files
label-extractor/batch_extractor.py
gkonoplya 3f8e6935a8 Refactor barcode extraction and enhance PDF processing capabilities
- Added extract_barcodes_from_pdf function to read barcodes from PDF files using fitz.
- Updated read_datamatrix_zxing to return both the barcode text and its Base64 representation.
- Modified main execution block to include PDF barcode extraction.
- Improved image loading for better compatibility with zxing.
- Updated requirements.txt to include pymupdf for PDF processing.
2026-02-21 12:42:17 +03:00

79 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)