Как массово конвертировать марки «Честного ЗНАКа» из EPS в PDF и разместить их на одном листе?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе с системой маркировки «Честный ЗНАК» пользователи часто сталкиваются с техническими ограничениями при попытке выгрузить большое количество кодов (более 1000–5000 штук). Проблемы могут возникнуть еще на этапе подготовки, когда выполняется заказ кодов маркировки остатков одежды или других товаров. Система либо выдает файлы в формате CSV с пометкой «truncated» (обрезанный), либо предлагает векторный формат EPS, который неудобен для прямой печати на обычных офисных принтерах. В этой статье мы подробно разберем, как решить проблему усеченных файлов, как автоматизировать конвертацию тысяч EPS-файлов в PDF и как скомпоновать их по несколько десятков штук на одном листе для экономии бумаги и времени — для этого подойдёт утилита печати кодов маркировки на листах А4.

Почему CSV-файл скачивается с пометкой «truncated»

Прежде чем приступать к конвертации графики, выясним причину появления «обрезанных» файлов. Проанализируем работу системы ГИС МТ (Честный ЗНАК). Статус «truncated» означает, что сервер системы выдал лишь часть данных из вашего запроса. Рассмотрим основные причины:

  1. Внутренние лимиты системы: При выгрузке огромных массивов данных (например, 7000 марок разом) веб-интерфейс может принудительно ограничивать объем файла для снижения нагрузки на серверную часть.
  2. Статус эмиссии: Если часть кодов в вашем заказе еще не перешла в финальный статус «Эмитирован» или находится в процессе обработки, система может сформировать файл только из тех кодов, которые полностью готовы на текущую секунду. В таких случаях помогает дополнительный запрос информации кодов Честного знака для уточнения статуса каждой единицы товара.
  3. Таймауты сессии: При генерации очень больших файлов браузер или сервер может оборвать соединение, в результате чего вы получаете недогруженный файл.

Рекомендация: Чтобы избежать этой ошибки, попробуйте разбивать заказы на более мелкие порции (до 1000 штук) или использовать API-интеграцию через 1С (поможет модуль интеграции 1С с Честным Знаком по API), где лимиты на передачу данных обычно выше, а контроль целостности файлов осуществляется строже.

Массовая конвертация EPS в PDF с помощью ImageMagick

Если вы уже скачали тысячи файлов в формате EPS, ручная конвертация через онлайн-сервисы нецелесообразна из-за ограничений по количеству файлов и платных подписок. Рассмотрим профессиональный инструмент ImageMagick. Это бесплатная утилита с открытым исходным кодом, предназначенная для пакетной обработки изображений через командную строку.

Для работы нам понадобится установленная утилита ImageMagick и интерпретатор языка PostScript — Ghostscript. Без Ghostscript конвертация векторных EPS-файлов будет невозможна. Иногда в процессе работы возникает обратная задача, когда необходимо выполнить извлечение DataMatrix кодов из PDF документов для получения текстовых значений (удобно через инструмент распознавания DataMatrix в PDF документах), и инструменты командной строки также могут в этом помочь.

Разберем команду для конвертации одного файла:

convert -density 300 input.eps output.pdf

В данном примере параметр -density 300 крайне важен. Поскольку EPS — это векторный формат, при переводе его в PDF (который может содержать как вектор, так и растр), нам нужно задать достаточное разрешение (DPI). Для корректного считывания штрихкодов DataMatrix сканерами на складе рекомендуется использовать разрешение от 300 до 600 DPI. Если оставить значение по умолчанию (обычно 72 DPI), код может «замылиться».

Для массовой обработки в среде Windows можно использовать простой bat-файл:

for %f in (*.eps) do convert -density 300 "%f" "%f.pdf"

Автоматизация процесса на языке Python

Если вам требуется более гибкий подход, например, автоматическое переименование или сложная логика обработки, проанализируем решение на языке Python. Для этого нам понадобятся библиотеки Pillow (PIL) и всё тот же Ghostscript.

Рассмотрим пример кода, который проходит по всем файлам в папке и сохраняет их в PDF:


from PIL import Image  
import glob
import os

# Ищем все файлы с расширением .eps
images = [f for f in glob.glob("*.eps")]

for f in images:
    # Открываем изображение
    img = Image.open(f)
    # Формируем новое имя файла, заменяя расширение
    new_filename = os.path.splitext(f)[0] + '.pdf'
    # Сохраняем в формате PDF
    img.save(new_filename, "PDF", resolution=300.0)

Важный момент: перед запуском скрипта убедитесь, что путь к исполняемым файлам Ghostscript добавлен в системную переменную PATH, иначе библиотека PIL выдаст ошибку о невозможности прочитать EPS-файл.

Как разместить 40–60 марок на одном листе (N-up печать)

Самый частый вопрос после конвертации: «Как напечатать 7000 марок, не потратив 7000 листов бумаги?». Каждая марка в PDF по умолчанию занимает одну страницу. Нам нужно выполнить компоновку (спуск полос).

Способ 1: Использование Python и библиотеки ReportLab

Выясним, как программно создать новый PDF-документ, в котором марки будут расположены сеткой. Рассмотрим доработанный пример кода:


from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
import glob
import os

filetypes = "marks/*.png" # Или сконвертированные PDF/JPG
outfile = "ready_to_print.pdf"

cols = 5  # Количество колонок
rows = 10 # Количество строк
imgWidth = 100 # Ширина картинки в пунктах
imgHeight = 100 # Высота картинки в пунктах

files = sorted(glob.glob(filetypes))
pdf_file = canvas.Canvas(outfile, pagesize=A4)

x_start = 20
y_start = 800

curr_col = 0
curr_row = 0

for filename in files:
    # Вычисляем координаты
    x = x_start + (curr_col * imgWidth)
    y = y_start - (curr_row * imgHeight)
    
    # Рисуем изображение
    pdf_file.drawImage(filename, x, y, width=imgWidth, height=imgHeight)
    
    curr_col += 1
    if curr_col >= cols:
        curr_col = 0
        curr_row += 1
        
    if curr_row >= rows:
        pdf_file.showPage() # Создаем новую страницу
        curr_row = 0
        curr_col = 0

pdf_file.save()

Способ 2: Виртуальный PDF-принтер (Без программирования)

Если вы не хотите писать код, можно воспользоваться функциями печати стандартных просмотрщиков PDF (например, Adobe Acrobat Reader или PDF-XChange Editor):

  1. Объедините все PDF-марки в один большой PDF-файл (это можно сделать через онлайн-сервисы или утилиту PDFTK).
  2. Откройте файл и выберите Печать.
  3. В настройках принтера найдите параметр «Несколько страниц на лист» (Multiple pages per sheet).
  4. Задайте сетку (например, 4 по горизонтали и 10 по вертикали).
  5. Выберите в качестве принтера «Microsoft Print to PDF». На выходе вы получите файл, где марки уже аккуратно разложены по сетке.

Оптимальный путь через 1С

Для разработчиков 1С существует еще более изящное решение, которое позволяет избежать промежуточной работы с EPS. Посмотрим на ситуацию под другим углом: файл CSV (пусть даже усеченный) содержит текстовый код маркировки. Этот текст — всё, что нужно для генерации штрихкода DataMatrix.

Рассмотрим алгоритм реализации в 1С:

  1. Загружаем данные из CSV в таблицу значений.
  2. Используем типовую библиотеку 1С (БПО) для генерации штрихкода. Метод МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода() позволяет сформировать изображение DataMatrix прямо в памяти программы.
  3. Выводим полученные картинки в ТабличныйДокумент. В макете можно заранее настроить сетку (например, 5 этикеток в ряд). Для специфических групп товаров, например шин, крайне важна правильная проверка кода маркировки для разрешительного режима онлайн перед печатью и продажей.
  4. Печатаем табличный документ стандартными средствами 1С.

Преимущества этого метода: Вы не зависите от внешних конвертеров, не теряете качество при преобразовании векторов и можете гибко управлять оформлением этикетки (добавлять логотип компании, цену или наименование товара рядом с кодом). Для этой задачи есть печать этикеток DataMatrix с произвольным дизайном.

Важные замечания по качеству

Проанализируем критические моменты, которые могут испортить всю работу:

Подводя итог, можно сказать: для разовых задач проще всего использовать PDF-принтер с настройкой компоновки страниц, а для регулярной обработки тысяч марок лучше один раз настроить скрипт на Python или реализовать генерацию непосредственно в 1С, используя текстовые данные из CSV.

← На главную