Обзор программы Marka-LK: когда DataMatrix выходит из PDF и идёт на принтер

Есть программы, которые делают красиво.
Есть программы, которые делают быстро.
А есть программы, которые смотрят на PDF с кодами Честного Знака и говорят:

«Так, ребята, вылезаем из документа, строимся по одному и маршируем на этикеточный принтер».

Именно этим занимается Marka-LK — небольшая Windows-программа для распознавания DataMatrix-кодов из PDF и печати их на этикетках.

Если коротко: программа берёт PDF, находит в нём коды маркировки, восстанавливает DataMatrix, формирует этикетку нужного размера и отправляет её на печать.

Если ещё короче: PDF внутрь — этикетки наружу.

Зачем нужна эта программа

В реальной жизни коды маркировки часто живут в PDF-файлах. Они вроде бы есть, но использовать их дальше не всегда удобно.

Например:

  • нужно распечатать коды на этикетках 58×40 мм;

  • нужно выбрать конкретные коды;

  • нужно напечатать несколько копий;

  • нужно сдвинуть код на пару миллиметров, потому что принтер считает себя художником;

  • нужно добавить подпись под DataMatrix;

  • нужно не сойти с ума при ручной обработке.

Вот тут и появляется Marka-LK— маленький помощник, который берёт на себя скучную часть работы.

Первый запуск: окно, кнопки и надежда

После запуска пользователя встречает обычное понятное окно:

  • выбор PDF-файла;

  • кнопка распознавания;

  • список найденных кодов;

  • настройки принтера;

  • параметры этикетки;

  • предпросмотр;

  • печать.

Никаких «облачных кабинетов», авторизаций, токенов, капчи и ритуального танца вокруг API.

Программа работает локально.
Ваш PDF остаётся у вас.
Ваши коды тоже.

И это уже хорошо: меньше магии — меньше мест, где может жить баг.

Как программа добывает коды из PDF

Внутри всё работает примерно так:

  1. PDF открывается через PyMuPDF.

  2. Каждая страница превращается в изображение.

  3. Библиотека pylibdmtx ищет на изображении DataMatrix.

  4. Найденные данные сохраняются как байты.

  5. Повторяющиеся коды отбрасываются.

  6. Пользователь получает список найденных кодов.

То есть программа фактически смотрит на PDF как человек, только без кофе и с DPI 350.

Особенно важно, что данные хранятся в байтовом виде. Для кодов Честного Знака это критично, потому что внутри может быть специальный символ GS — невидимый разделитель с кодом 0x1D.

Для обычного человека это «какая-то невидимая штука».
Для маркировки — важный символ.
Для разработчика — причина трёх часов отладки и фразы:

«Почему оно выглядит одинаково, но не работает?»

DataMatrix: не просто квадратик

DataMatrix в программе не просто копируется картинкой из PDF. После распознавания он генерируется заново с помощью treepoem.

Это полезно, потому что исходный PDF может быть:

  • сжатым;

  • размытым;

  • масштабированным;

  • слегка уставшим;

  • пережившим экспорт из какой-нибудь системы, которая «ничего не меняла», но изменила всё.

Программа берёт данные кода и строит новый DataMatrix. Свежий, бодрый, квадратный. Как будто он только что вышел из спортзала для двумерных штрихкодов.

Настройки этикетки: миллиметры против реальности

В программе можно задать:

  • ширину этикетки;

  • высоту этикетки;

  • размер DataMatrix;

  • смещение по X;

  • смещение по Y;

  • количество копий;

  • ограничение количества печатаемых кодов.

Настройки задаются в миллиметрах, что удобно для человека.
Потом программа переводит их в пиксели с учётом DPI принтера.

Здесь начинается классическая битва:

«58 мм в программе»
против
«58 мм по мнению драйвера принтера»

Именно поэтому есть параметры смещения. Если код уехал вправо, вниз или решил начать самостоятельную жизнь, его можно вернуть на место.

Смещение X и Y — это не костыль.
Это дипломатический инструмент переговоров с принтером.

Центрирование DataMatrix

Есть галочка:

«Центрировать DataMatrix по ширине»

Если она включена, код аккуратно размещается по центру этикетки.
Если выключена, позиция задаётся от левого края.

Полезно, потому что разные этикеточные принтеры имеют разное представление о геометрии. Некоторые считают левый край там, где он действительно находится. Некоторые — где-то рядом. Некоторые, кажется, ориентируются по фазам луны.

Подпись под кодом

Программа умеет печатать подпись под DataMatrix.

Для Честного Знака обычно берётся часть кода до первого символа GS. То есть криптохвост не печатается текстом целиком, потому что:

  1. он длинный;

  2. он страшный;

  3. он никому визуально не нужен;

  4. этикетка не резиновая.

Можно настроить:

  • включать или выключать подпись;

  • размер шрифта;

  • количество символов в строке.

Если подпись не помещается, можно уменьшить шрифт или разбить текст на строки.
Если и это не помогает — возможно, вы пытаетесь напечатать роман Достоевского под DataMatrix.

Предпросмотр: лучше один раз увидеть

Перед печатью можно выбрать код и нажать:

«Предпросмотр выбранного»

Откроется окно, где видно будущую этикетку.

Это очень полезно, потому что печатать тестовые этикетки вслепую — занятие для смелых. Особенно когда рулон этикеток заканчивается, а принтер уже начал издавать звуки голодного факса.

Предпросмотр позволяет проверить:

  • размер кода;

  • положение кода;

  • подпись;

  • перенос строк;

  • общую композицию.

Если всё выглядит хорошо — можно печатать.

Если нет — меняем миллиметры, шрифт и договариваемся с принтером ещё раз.

Работа с принтером

Печать реализована через Windows и pywin32.

Программа получает список установленных принтеров, позволяет выбрать нужный и отправляет изображение этикетки на печать.

То есть внутри происходит примерно такое:

  1. создаётся изображение этикетки;

  2. изображение передаётся в Windows-принтер;

  3. Windows передаёт его драйверу;

  4. драйвер делает вид, что всё понял;

  5. принтер печатает;

  6. пользователь либо радуется, либо меняет смещение Y на -1.5.

Поддерживаются локальные и сетевые принтеры, если они нормально установлены в Windows.

Ограничение печати и выбор кодов

Программа позволяет печатать:

  • все найденные коды;

  • только выбранные в списке;

  • первые N кодов;

  • несколько копий каждого кода.

Это удобно, если нужно:

  • распечатать тестовую партию;

  • повторно напечатать несколько кодов;

  • не отправить случайно 900 этикеток вместо 9;

  • сохранить деревья, нервы и термоленту.

Поле «Печатать первых N кодов» особенно полезно для осторожных людей.

Значение:

0

означает «печатать всё».

Значение:

5

означает «печатать первые пять и посмотреть, не устроил ли принтер перформанс».

Сохранение настроек

Настройки сохраняются автоматически в JSON-файл в профиле пользователя Windows:

%LOCALAPPDATA%\CHZPDFLabelPrinter\settings.json

Это значит, что после перезапуска программа помнит:

  • выбранный принтер;

  • размеры этикетки;

  • DPI распознавания;

  • смещения;

  • настройки подписи;

  • количество копий.

JSON — это как блокнот, только программисты делают вид, что это база данных.

DPI распознавания: главный рычаг

Один из ключевых параметров — DPI распознавания PDF.

По умолчанию стоит что-то вроде:

350

Если DataMatrix не найден, можно попробовать:

400

или:

500

Чем выше DPI, тем больше изображение страницы и тем выше шанс распознать мелкий код.

Но есть нюанс: чем выше DPI, тем больше нагрузка на память и процессор.

Иными словами:

  • 300 DPI — быстро, но может не увидеть мелочь;

  • 400 DPI — золотая середина;

  • 500 DPI — «я верю в этот PDF»;

  • 900 DPI — «у меня мощный компьютер и нет планов на вечер».

Техническая начинка

Под капотом программа использует:

  • Tkinter — графический интерфейс;

  • PyMuPDF — чтение и рендеринг PDF;

  • Pillow — работа с изображениями;

  • pylibdmtx — распознавание DataMatrix;

  • treepoem — генерация DataMatrix;

  • pywin32 — печать через Windows;

  • JSON — хранение настроек.

Архитектура простая и практичная:

  • интерфейс запускается в главном потоке;

  • распознавание и печать идут в отдельных потоках;

  • интерфейс не должен зависать;

  • статусы обновляются через root.after.

То есть программа старается быть вежливой: тяжёлую работу делает отдельно, а интерфейс не превращает в ледяную скульптуру.

Сильные стороны программы

Главные плюсы:

  • работает локально;

  • не требует серверов;

  • распознаёт DataMatrix из PDF;

  • печатает на выбранный Windows-принтер;

  • позволяет настраивать размер этикетки;

  • поддерживает подпись под кодом;

  • есть предпросмотр;

  • сохраняет настройки;

  • можно печатать выбранные коды;

  • можно ограничивать количество печати.

Это не огромная корпоративная платформа на 17 микросервисов, где кнопка «Печать» вызывает Kubernetes.
Это утилита, которая делает конкретную задачу.

И именно поэтому она полезна.

Ограничения и нюансы

Без них никуда.

Только Windows-печать

Печать реализована через pywin32, поэтому полноценная печать рассчитана на Windows.

На Linux или macOS код можно адаптировать, но из коробки это Windows-инструмент.

Зависимость от качества PDF

Если PDF плохого качества, распознавание может не сработать.

Иногда нужно увеличить DPI. Иногда — получить нормальный PDF. Иногда — посмотреть на файл и тихо спросить:

«Кто тебя так экспортировал?»

Treepoem и Ghostscript

Для генерации штрихкодов через treepoem может потребоваться установленный Ghostscript.

Ghostscript — это такая древняя и уважаемая сущность, которая умеет работать с PostScript и иногда напоминает, что в мире до сих пор есть технологии старше многих разработчиков.

Принтеры бывают разными

Даже если программа формирует идеальную этикетку, драйвер принтера может внести творческие изменения.

Поэтому тестовая печать — обязательна.

Принтер — это не устройство вывода.
Это отдельная философия.

Для кого эта программа

Программа подойдёт тем, кто:

  • работает с кодами Честного Знака;

  • получает марки в PDF;

  • печатает этикетки;

  • использует Windows;

  • хочет управлять размерами и расположением кода;

  • не хочет вручную вырезать каждый DataMatrix;

  • ценит кнопку «Предпросмотр».

Особенно полезна для небольших производств, складов, магазинов, операторов маркировки и всех, кто однажды сказал:

«Почему я не могу просто взять коды из PDF и напечатать их нормально?»

Теперь может.

Итог

marka_lk — это практичная программа для распознавания и печати DataMatrix-кодов Честного Знака из PDF.

Она не пытается быть всем сразу.
Она не предлагает CRM, ERP, BI и модуль предсказания настроения принтера.
Она просто берёт PDF, находит коды, делает этикетки и отправляет их на печать.

С технической точки зрения это честная утилита с понятной логикой:

PDF → изображение → DataMatrix → этикетка → принтер

А с бытовой точки зрения — это способ сэкономить время, нервы и несколько рулонов испорченных этикеток.

Главное помнить: если что-то печатается на пару миллиметров не туда — это не ошибка.
Это принтер напоминает, что он тоже личность.

Программа и библиотека для работы - библиотеку установить - программу запустить:

https://disk.yandex.ru/d/vtmuVkDrla6BUQ

Будут вопросы и предложения - пишите в чат.

Или оставляйте заявку

 

Метаданные статьи

Идентификатор статьи:
96
Категория:
Дата добавления:
2026-07-14 21:57:35
Просмотры:
134
Рейтинг (Голоса):
(2)

Связанные статьи