- PVSM.RU - https://www.pvsm.ru -
Не так давно передо мной встала задача: распечатка документа определенного формата с помощью мобильного устройства. На телефоне должны были вводиться определенные значения, отправляться на сервер (для того, чтобы потом можно было использовать эти данные на веб сайте) и печать документ с этими данными. С самого начала мой выбор пал на Google cloud print [1], так как он максимально прост в использовании и решении подобных задач. Но при использовании этого варианта есть несколько недостатков:
Поэтому я решил написать свой скрипт для подобных операций.
Мой выбор пал на язык программирования 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 [2]. Это хорошее бесплатное облако, для хранения ваших данных. Его удобно использовать тем, что оно работает практически на всех платформах (Грубо говоря: вы можете добавить закинуть данные на облако с 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 страницу, которая тут же пойдет на печать.
Если возникнут какие-то вопросы, подсказки или вы просто решите высказать свое мнение по поводу статьи — пишите в комментариях. Всех с наступающим Новым Годом!
Автор: StopFan
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/78333
Ссылки в тексте:
[1] Google cloud print: http://www.google.com/cloudprint/learn/?hl=ru
[2] Parse: http://parse.com
[3] Источник: http://habrahabr.ru/post/246989/
Нажмите здесь для печати.