Как стать автором
Обновить

Печатаем документ в виде чека с помощью Python и Parse

Время на прочтение3 мин
Количество просмотров28K
Не так давно передо мной встала задача: распечатка документа определенного формата с помощью мобильного устройства. На телефоне должны были вводиться определенные значения, отправляться на сервер (для того, чтобы потом можно было использовать эти данные на веб сайте) и печать документ с этими данными. С самого начала мой выбор пал на Google cloud print, так как он максимально прост в использовании и решении подобных задач. Но при использовании этого варианта есть несколько недостатков:

  • Очень медленная обработка запроса
  • Нужно где-то формировать PDF документ и возвращать ссылку на него
  • Постоянно нужно выбирать принтер (если у вас подключен только один принтер к Google cloud print, то все равно нужно выбирать между ним и сохранением на Google Drive)

Поэтому я решил написать свой скрипт для подобных операций.

Мой выбор пал на язык программирования Python, так как он наиболее гибкий и подходит для данных задач. В своей разработке я использовал ОС Ubuntu Linux. Так что установка библиотек будет представлена для нее.

С самого начала нам нужно научиться формировать PDF документ. Проще всего конвертировать HTML разметку в PDF с помощью библиотеки xhtml2pdf. Для начала установим необходимые пакеты:

sudo apt-get install python-cups python-pip
python-dev

python-cups – это библиотека, с помощью которой Python может работать с вашим принтером, python-pip сделает установку xhtml2pdf проще.

Дальше устанавливаем xhtml2pdf:

 sudo pip install xhtml2pdf

Следующий код покажет, как все работает:

 #!/usr/bin/env python
 # Печать файла
 
 import cups
 from xhtml2pdf import pisa
	
 def main():
       # Имя, для промежуточного файла PDF формата
       filename = "/home/pi/print.pdf"
	
       # Генерируем контент в виде HTML страницы
       xhtml = "<h1>Test print</h1>\n"
       xhtml += "<h2>This is printed from within a Python application</h2>\n"
       xhtml += "<p style=\"color:red;\">Coloured red using css</p>\n"
          
       pdf = pisa.CreatePDF(xhtml, file(filename, "w"))
       if not pdf.err:
              # Закрываем PDF файл - в противном случае мы не сможем прочитать его
              pdf.dest.close()
      
              # Печатаем файл используя CUPS
              conn = cups.Connection()
              # Получаем список всех принтеров, подключенных к компьютеру
              printers = conn.getPrinters()
              for printer in printers: 
                     # Выводим имя принтера в консоль
                     print printer, printers[printer]["device-uri"]
                     # Получаем первый принтер со списка принтеров
                     printer_name = printers.keys()[0]
                     conn.printFile(printer_name, filename, "Python_Status_print", {})
       else:
              print "Unable to create pdf file"

 if __name__=="__main__":
       main()

Тут все предельно просто и понятно. Картинки можно вставлять обычным HTML кодом:

<p><img src='/home/usr/image.jpg'/>

Но возникает вопрос: "Где хранить данные и откуда их достать для распечатки?".

Для этого мы воспользуемся сервисом Parse. Это хорошее бесплатное облако, для хранения ваших данных. Его удобно использовать тем, что оно работает практически на всех платформах (Грубо говоря: вы можете добавить закинуть данные на облако с Android устройства, а достать на IOS, PHP, JavaScript и других платформах).

Специально для Python там есть REST API, с помощью которого можно слать любые запросы в несколько строчек. Для того, чтобы достать их с Pars'a используем код:

 connection = httplib.HTTPSConnection('api.parse.com', 443)
 connection.connect()
 connection.request('GET', '/1/classes/TestPay', '', {
       "X-Parse-Application-Id": "<b>yourAppId</b>",
       "X-Parse-REST-API-Key": "<b>yourRestApiKey</b>"
 })
 result = json.loads(connection.getresponse().read())

Здесь yourAppId – это ключ к вашему приложению, а yourRestApiKey – ключ к Api, которое вы используете. Детальнее читайте на сайте. Дальше массив result обрабатываете как JSON обьект и можете вставлять в вашу HTML страницу, которая тут же пойдет на печать.

Если возникнут какие-то вопросы, подсказки или вы просто решите высказать свое мнение по поводу статьи — пишите в комментариях. Всех с наступающим Новым Годом!
Теги:
Хабы:
Всего голосов 13: ↑12 и ↓1+11
Комментарии7

Публикации

Истории

Работа

Python разработчик
195 вакансий
Data Scientist
106 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн