Перейти к содержимому

31 октября 2024 исполняется 11 лет как появилась поддержка печати в Android

    Двойственные чувства вызывает у меня эта дата. Вроде бы ребенок и вырос, но в некоторых моментах так и остались короткие штанишки, купленные в самом начале.

    Телефоны научились печатать сразу на принтеры, но при первой печати всегда появляется предупреждение «Ваши данные могут передаваться на сторонний сервер».

    Облачная печать оказалась не удачным проектом, последний сервер Google Cloud Print был закрыт 31 декабря 2020 года.

    В общем серверов давно нет, большинство драйверов никаких данных на свои сервера не отсылают, а предупреждение появляется всегда.

    Так же остается послевкусие какого-то несерьезного отношения от прочтения вводной части официальной документации, кроме того документация не изменялась с 2019 года.

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

    Как устроена печать в Android

    Есть системная служба (служба печати) и есть два API. Одно апи для прикладных программ, второе для разработчиков драйверов принтеров. Первое нужно тем, кто хочет, что-то распечатать и его не интересуют подробности как это будет сделано. Вторым андроид передает задание на печать после выбора пользователем конкретного расширения для службы печати. Термин драйвер применительно к Android не корректен, более официально это называется Print Service Plugin. Следующую путаницу создает, то что часто plugin опускают и получается, что название совпадает с частью, которая относится к самой операционной системе.

    В 2013 году Google внедрила поддержку печати в ряд своих системных приложений (почта,галлерея и т.д. ) и реализовала плагин для своей облачной службы печати. В основу обмена заданиями печати был выбран формат PDF. Фактически на телефонах требовалось только организовать информационный обмен (получил-отправил задание, дождался ответа — вернул)

    API печати для разработчиков программ

    Между программой(п) и операционной системой(ос) происходит примерно такой диалог:

    • П: я хочу послать на принтер вот этот pdf документ, желательно на формате A4 и в портретной ориентации.
    • ОС: Последний раз, когда пользователь печатал бумага в принтере была Letter. Может даш мне свежую версию документа ?
    • П: нет
    • ОС: Слушай тут пользователь выбрал другой принтер и там по краям нельзя печатать по 7 мм. Будешь переделывать документ ?
    • П:нет
    • Ау, он меняет ориентацию листа! Ты как ?
    • П: ничего не хочу знать
    • Все он определился. Ему нужны страницы 1,3-5
    • П: переделываю. Вот исправленный из 4х страниц.

    Не устали ? Приблизительно так выглядет взаимодействие по самой гибкой в плане возможности схеме и хорошо, что приложению остается только реагировать на требование предоставить pdf файл.

    Сгенерировать pdf документ самостоятельно сложная задача. Мое личное мнение такую возможность они заложили в апи только потому, что у них было приложение Google documents.

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

    Еще существует обертка над системным компонентом просмотра html (WebView).

    Шло время, андроид менялся, и думаю с появлением Android 8.1 Go edition прикладные программисты просто опустили руки. Взаимодействие предпалогало, что приложение должно писать данные в поток из фона. А из-за нехватки ресурсов, его просто завершили. Сочувствую разработчикам Android PDF Viewer, которым пришлось искать выход из этой ситуации.

    В настоящее время и на протяжении всех этих лет честную печать через предложеное апи можно найти только в продуктах самого гугла и очень крупных компаний (н-р Microsoft Word) .

    Стандартом дефакто для печати стало использование функционала «Поделиться»

    Подтверждение этого можно найти даже в Хроме. Они отказались от отдельного пункта в меню и перенесли вызов печати в раздел «Поделиться»

    Как распечатать Web-страницу в Google Chrome

    Вызовете выпадающее меню по значку из трех точек в правом верхнем углу экрана

    Выберите в меню пункт «Поделиться»

    Найдите кнопку или иконку с принтером «Печать»