Implement CLI commands for batch extraction and PDF generation
- Added command-line interface using Click for `batch_extractor.py` to handle extraction from ZIP and PDF files. - Enhanced `save_to_excel` function to create parent directories for output files. - Updated `build_pdf.py` to include a CLI for generating PDF labels from Excel data. - Improved README.md with detailed usage instructions for the new CLI commands. - Added `click` to requirements.txt for command-line functionality.
This commit is contained in:
@@ -3,6 +3,7 @@ import zipfile
|
||||
import tempfile
|
||||
import pandas as pd
|
||||
from read_image import read_datamatrix_zxing, extract_barcodes_from_pdf
|
||||
from pathlib import Path
|
||||
import click
|
||||
import render_eps
|
||||
|
||||
@@ -59,6 +60,14 @@ def save_to_excel(data: list, output_path: str):
|
||||
if not data:
|
||||
print("Нет данных для сохранения в Excel.")
|
||||
return
|
||||
|
||||
# Преобразуем путь в объект Path для удобной работы с файловой системой
|
||||
path_obj = Path(output_path)
|
||||
|
||||
# Создаем родительскую директорию (вместе со всеми промежуточными), если ее нет
|
||||
# Метод parent возвращает путь к папке, в которой должен лежать файл
|
||||
# exist_ok=True гарантирует отсутствие ошибки, если папка уже существует
|
||||
path_obj.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Формируем DataFrame из списка кортежей
|
||||
df = pd.DataFrame(data, columns=["Текст", "Base64"])
|
||||
@@ -68,11 +77,52 @@ def save_to_excel(data: list, output_path: str):
|
||||
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)
|
||||
@click.group(help="Утилита для массового извлечения DataMatrix кодов и сохранения их в Excel.")
|
||||
def cli():
|
||||
"""Основная группа команд для CLI."""
|
||||
pass
|
||||
|
||||
pdf_path = 'data/0109, цвет синий, р.L 10шт_b3ba8577-7874-4dfa-a091-e6953fbe0ca7_gtin_04639970975214_quantity_10.pdf'
|
||||
pdf_data = extract_dm_from_pdf(pdf_path)
|
||||
@cli.command(help="Извлекает коды из EPS-файлов внутри ZIP-архива.")
|
||||
@click.argument('input_zip', type=click.Path(exists=True, dir_okay=False, path_type=Path))
|
||||
@click.argument('output_xlsx', type=click.Path(dir_okay=False, writable=True, path_type=Path))
|
||||
def from_zip(input_zip: Path, output_xlsx: Path):
|
||||
"""
|
||||
Пакетная обработка ZIP-архива.
|
||||
|
||||
INPUT_ZIP: Путь к исходному .zip файлу с EPS-этикетками.
|
||||
OUTPUT_XLSX: Путь для сохранения результата (например, result.xlsx).
|
||||
"""
|
||||
click.echo(f"Начинаю обработку архива: {input_zip.name}")
|
||||
try:
|
||||
data = extract_eps_from_zip(str(input_zip))
|
||||
if data:
|
||||
save_to_excel(data, str(output_xlsx))
|
||||
click.secho(f"Успех! Найдено кодов: {len(data)}. Файл сохранен: {output_xlsx.name}", fg="green")
|
||||
else:
|
||||
click.secho("Внимание: в архиве не найдено читаемых кодов.", fg="yellow")
|
||||
except Exception as e:
|
||||
click.secho(f"Ошибка при обработке ZIP: {e}", fg="red")
|
||||
|
||||
@cli.command(help="Извлекает коды со всех страниц PDF-документа.")
|
||||
@click.argument('input_pdf', type=click.Path(exists=True, dir_okay=False, path_type=Path))
|
||||
@click.argument('output_xlsx', type=click.Path(dir_okay=False, writable=True, path_type=Path))
|
||||
def from_pdf(input_pdf: Path, output_xlsx: Path):
|
||||
"""
|
||||
Пакетная обработка PDF-документа.
|
||||
|
||||
INPUT_PDF: Путь к исходному многостраничному .pdf файлу.
|
||||
OUTPUT_XLSX: Путь для сохранения результата (например, result.xlsx).
|
||||
"""
|
||||
click.echo(f"Начинаю обработку PDF-документа: {input_pdf.name}")
|
||||
try:
|
||||
data = extract_dm_from_pdf(str(input_pdf))
|
||||
if data:
|
||||
save_to_excel(data, str(output_xlsx))
|
||||
click.secho(f"Успех! Найдено кодов: {len(data)}. Файл сохранен: {output_xlsx.name}", fg="green")
|
||||
else:
|
||||
click.secho("Внимание: в PDF-файле не найдено читаемых кодов.", fg="yellow")
|
||||
except Exception as e:
|
||||
click.secho(f"Ошибка при обработке PDF: {e}", fg="red")
|
||||
|
||||
if __name__ == "__main__":
|
||||
cli()
|
||||
|
||||
Reference in New Issue
Block a user