Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Как распечатать документ в формате чека воспользовавшись Python и Parse?

Как распечатать документ в формате чека воспользовавшись Python и Purse?

Недавно мне нужно было выполнить одно не совсем традиционное действие – распечатать документ определенного формата через мобильное устройство. Суть в следующем – на смартфоне мы вводим определенные данные, затем они отправляются на сервер (это нужно для того, чтобы мы могли с ними работать еще и на сайте) и напечатать документ с ними. Было решено воспользоваться сервисом Google Cloud Print. Функционала в нем для этой цели достаточно, да и в использовании он прост.

Однако, как всегда не обошлось без минусов:

  • Запрос обрабатывается очень долго

  • Сначала мы должны где-то сформировать PDF документ и сделать для него ссылку.
  • Каждый раз требуется выбор принтера (даже если мы подключили к сервису только один, нам все равно придется выбирать – принтер или сохранение в Google Drive).

В итоге было решено сделать небольшой скрипт, который бы выполнял эти действия.

Python отличается своей гибкость, его под эти цели предостаточно, поэтому был выбран именно этой язык. Разрабатывался скрипт в ОС Ubuntu.

Для начала мы должны уметь создавать этот самый PDF документ. Я решил воспользоваться самым простым вариантом – конвертирование HTML разметки в PDF посредством специальной библиотеки xhtml2pdf. Итак, займемся установкой нужных пакетов:

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

Python-cups нужен нам, чтобы Python смог работать с принтером, а python-pip понадобится для упрощения инсталляции 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 код:

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

Теперь вы, наверное, думаете, а где же данные будут хранится и как мы их будем доставать, чтобы распечатать?

Тут нам поможет сервис Parse (parse.com). Качественный бесплатный облачный сервис. Хорош он тем, что может работать практически на любой платформе. А под Python имеется REST API, благодаря которому мы можем отправлять любой запрос посредством нескольких строк. Чтобы вытянуть их с сервиса нам понадобится такой код:

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

Немного поясню:

  • yourAppId – ключ к нашему приложению.
  • yourRestApiKey – ключик от API, которым вы пользуетесь.

На официальном сайте сервиса вы найдете более подробную информацию. Затем массив result нужно обработать как объект JSON, и он уже готов к вставке в страничку HTML, которая будет печататься. На этом все, скрипт готов к работе!

А если вам необходимо заменить цепь двигателя, но вы не знаете где приобрести качественную, то заходите на сайт http://www.ua.all.biz/cep-dvigatelya-bgg1070160. Здесь вы найдете цепи для двигателей высокого качества, при этом по довольно доступным ценам. Здесь же найдется много других товаров по очень вкусным ценам!

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

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

(обязательно)