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






Недавно мне нужно было выполнить одно не совсем традиционное действие – распечатать документ определенного формата через мобильное устройство. Суть в следующем – на смартфоне мы вводим определенные данные, затем они отправляются на сервер (это нужно для того, чтобы мы могли с ними работать еще и на сайте) и напечатать документ с ними. Было решено воспользоваться сервисом 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. Здесь вы найдете цепи для двигателей высокого качества, при этом по довольно доступным ценам. Здесь же найдется много других товаров по очень вкусным ценам!