Как печатать этикетки (штрих-код) из приложения Ruby on Rails?

Мое первое приложение, которое я разработал в RoR, предназначено для некоторых ПК с сенсорным экраном, используемых на нашем складе. Когда рабочий на складе забирает какой-то материал, он вводит количество в форму.
Теперь я хочу напечатать этикетку, содержащую: имя клиента, описание материала, количество и штрих-код на нашем принтере Zebra.
Как мне это сделать? сделать это из приложения Ruby on Rails?

  • Отправка управляющих символов, необходимых для ZPL (язык принтера Zebra), непосредственно с контроллера? (не очень удобно)

  • Создайте представление в HTML, отправьте его клиенту, и клиент должен его распечатать. (не очень удобно и подвержено ошибкам, так как складскому работнику приходится выполнять дополнительные действия, он может выбрать не тот принтер или вообще не печатать этикетку)

  • Создайте pdf-документ с контроллера и отправьте его на принтер с сервера (о, нет, принтер не понимает pdf, поэтому мне нужно управлять читателем pdf, чтобы выполнить печать?? Это было бы не очень быстро, так как отправит этикетку в виде графического изображения на принтер

  • Создать гем, который скроет всю логику, необходимую для печати? (Есть ли драгоценные камни, которые уже делают это?)

Буду признателен за каждый комментарий.

Спасибо

Клаус


person Klaus    schedule 03.04.2011    source источник
comment
Привет @klaus, не могли бы вы найти какое-либо решение на свой вопрос, у меня точно такое же требование, как вы упомянули в своем вопросе. Пожалуйста, ответьте, если вы нашли решение. Спасибо   -  person Jimmy Thakkar    schedule 08.08.2013
comment
Также интересует любое решение этого вопроса.   -  person sshefer    schedule 23.10.2013


Ответы (4)


Я бы отправил необработанный ZPL на принтер. Вы можете использовать такой инструмент, как Bartender (я рекомендую установить Bartender Only по этой ссылке. Вы можно в основном создать свою этикетку в этом инструменте.После того, как вы разработали свою этикетку, вы загрузите драйверы принтера бармена для своего принтера zebra, настроите фиктивный принтер с этими драйверами и распечатаете эту этикетку, которую вы разработали, в файл.Это даст вам необработанный zpl.Из него вы можете в основном заменить все динамические данные в файл zpl, который вы распечатали на предыдущем шаге, и отправить его непосредственно на принтер через последовательный порт, tcp / ip или usb.

person Cole W    schedule 07.04.2011

Изменить: я нашел гораздо лучшее решение, продолжая копаться в этом. Это довольно значительно отредактировано, чтобы сосредоточиться на решении Java-апплета, которое я в итоге использовал.

По сути, вы создадите метку как необработанный текст ZPL. Затем вам нужно отправить этот простой текст на принтер, который сгенерирует этикетку.

Если ваш сервер может получить доступ к IP-адресу принтера, вы можете скопировать ZPL на принтер непосредственно из серверного процесса. Если это удаленное веб-приложение, вам нужно, чтобы клиент отправил вам ZPL. Песочница браузера затрудняет выполнение этого — драйверы хотят услужливо мешать. Есть несколько вариантов; наиболее распространенным является использование небольшого апплета Java или Flash для фактического копирования. Если вы можете получить конкретный веб-браузер, который ваши пользователи используют для печати на текстовом принтере, ничего не добавляя, вы можете использовать локальную печать, но, как правило, наиболее надежным подходом является использование вспомогательного Java-апплета.

Я использую для этого Java-апплет jZebra: http://code.google.com/p/jzebra/

Это очень чистый и простой подход, посмотрите на образец HTML в пакете для загрузки, и несколько строк кода распечатают этикетку. Я только что отредактировал образец и планирую использовать его в качестве всплывающего окна производственного кода.. это действительно так просто.

Два предостережения с этим подходом:

  • У ваших пользователей должна быть установлена ​​JRE
  • jZebra находит принтер Zebra по имени принтера. Существуют очень конкретные руководства (в них есть подробные инструкции по установке для Mac, Windows и Linux) о том, что вам нужно сделать, но они хорошо документированы, и вам просто нужно, чтобы ваши пользователи следовали инструкциям. После правильной настройки работает отлично.
person Thaeli    schedule 11.04.2011
comment
Нашел вариант сделать это через Flash. Это немного другой вариант использования, когда принтер является сетевым принтером в той же локальной сети, что и веб-браузер, и вы печатаете через сеть: devpro.it/xmlsocket - person Thaeli; 11.04.2011
comment
Спасибо за ваше интересное предложение, я рассмотрю его в ближайшие дни. - person Klaus; 13.04.2011

Более простое решение, и я считаю, что оно лучше. Обычно на большинстве браузеров и компьютеров установлена ​​программа просмотра PDF. Так что просто создавайте этикетки в виде PDF-документов и отправляйте их в браузер.

Мы реализовали печать этикеток на принтере Zebra в ROR следующим образом.

  1. Создавайте страницы меток точного формата в html.
  2. Преобразуйте html в pdf с помощью wickedPDF.

Обычно этикетки также содержат штрих-коды.

Таким образом, общее решение будет таким:

  1. Создавайте штрих-коды с помощью драгоценного камня Барби.
  2. Создайте html, используя штрих-коды и ваши фактические данные, которые должны быть на этикетке.
  3. Преобразование HTML-представления в PDF.
person Community    schedule 07.12.2013
comment
Можем ли мы сделать это с любым принтером? В моем случае это принтер Brother. - person Rima; 29.06.2015
comment
Да, вы можете сделать это с помощью принтера, потому что большинство принтеров обеспечивают возможность печати в формате PDF. В конечном счете, с этим решением вы делегируете задание на печать средству просмотра PDF. - person Red Boy; 02.07.2015

Звучит как работа для расширения ruby ​​C. Возможно, что-то вроде штрих-кода gnu http://www.gnu.org/software/barcode/ библиотека и какой-либо другой открытый стандарт для принтера Zebra, если он существует? Однажды я сделал приложение для рельсов, которое создавало купоны и активно использовало штрих-код gnu, но я сделал простую команду оболочки для взаимодействия с ним.

person MetaSkills    schedule 06.04.2011