Печать квитанции из веб-приложения Django - PullRequest
6 голосов
/ 13 февраля 2012

Я занимаюсь разработкой POS.К сожалению, POS должен печатать через термопринтер чеков (TM-T88IV, Epson).Веб-приложение основано на Django.Есть ли идея, как система может автоматически распечатать квитанцию, когда пользователь щелкает элемент управления в веб-приложении?

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

Между прочим, принтер подключен к клиенту, и печать должна быть запущена без вывода сообщений, а это означает, что вмешательство человека не требуется.После завершения транзакции начинается печать.

Любые предложения приветствуются!

Ответы [ 3 ]

7 голосов
/ 03 сентября 2012

Я вижу два способа сделать это:

Первый способ - настроить браузер

Примечания

Хорошее решение, если у вас есть один принтер для каждого клиента (потому что вы можете использовать только принтер по умолчанию). Имейте в виду, что вы можете удалить свой сервер печати (полезно для устройств с очень ограниченными ресурсами), создав скрипт, который браузер должен автоматически выполнить для открытия вашего файла. Вы можете использовать что-то вроде этого:

#!/bin/bash
printer="/dev/usb/lp0"
encoding_needed=true #false

if $encoding_needed; then
    iconv -c -t 437 $1 > $printer
else
    cat $1 > $printer
fi

Firefox

  • Ручная настройка:
    1. Открыть о: config
    2. Создайте новое логическое значение с именем print.always_print_silent и установите для него True
    3. Создайте новое логическое значение с именем print.show_print_progress и установите для него False
  • Используйте расширение, например: https://addons.mozilla.org/en-us/firefox/addon/attendprint/

Имейте в виду, что существуют другие расширения для создания киосков, например:

Chrome

Вы можете запустить его с помощью следующих опций: --kiosk --kiosk-printing

Internet Explorer

Для режима киоска см .: http://support.microsoft.com/kb/154780

Второй метод - сервер обрабатывает каждый принтер

Примечания

Хорошее решение, если:

  1. У вас больше клиентов, чем принтеров (мало денег или неисправных принтеров)
  2. Больше принтеров, чем клиентов (разные принтеры или цвета бумаги для разных нужд)
  3. Клиенты, которые не могут печатать напрямую (КПК / смартфоны)
  4. Вы хотите знать состояние принтера

Как это сделать

  1. Подключение принтеров (к клиентам и / или к серверу)
  2. Совместное использование принтеров, подключенных к клиентам по сети
  3. Управление каждым принтером с вашего сервера Django
5 голосов
/ 13 февраля 2012

Здесь есть два варианта: напечатать html-страницу или предоставить файл PDF.

Примечание. Изначально не было ясно, что распечатки должны выполняться автоматически, а это означает, что ответ не является непосредственно полезным для OP.

HTML + "Print Me"

Показать квитанцию ​​в виде html-страницы, затем создайте таблицу стилей media="print" CSS, которую браузер будет использовать при печати квитанции. можно многое сказать о таблицах стилей печати CSS , но важно то, что вы должны удалить все навигационные элементы и изображения, которые будут дорогими для печати. ​​

Когда вы сделаете это,пользователь просто должен будет распечатать страницу сам.Вы также можете добавить кнопку «Распечатать меня», которая покажет вашему пользователю диалоговое окно принтера.Это делается с помощью JavaScript:

<a href="javascript:window.print()">Print this page</a>

(Это немного навязчиво для ваших клиентов, у которых нет JS, проверьте этот урок о печати JS для лучшего способа.)

PDF

Создайте PDF в Django и покажите его пользователю.Он сможет распечатать его или сохранить на своем компьютере позже.Большинство веб-сайтов делают это, так как намного проще контролировать макет PDF-файла, и будет проще сделать его похожим на настоящую квитанцию.

  • XSL-FO может помочь вам в этом (он переводит XML в PDF с «таблицей стилей»).
  • Кажется, более Pythonic способобъяснено в Django docs
  • На приведенных выше страницах перечислены альтернативы, такие как xhtml2pdf (Пиза), который, похоже, часто используется в StackOverflow
2 голосов
/ 14 июня 2012

Если вы используете raw / esc / p, попробуйте jzebra для кода Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...