Печать HTML документов

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

В Android 4.4 (API 19), класс WebView обновлен и поддерживает печать HTML содержимого. Класс позволяет загрузить локальный HTML ресурс или страничку из web, создать задание на печать и передать его в сервис печати Android.

В уроке рассказывается, как быстро создать HTML документ, включающий текст и графику и использовать класс WebView, чтобы его распечатать.

Загрузка HTML документа

Печать HTML документа с помощью WebView предполагает загрузку HTML ресурса или создание HTML документа как строки. В этом разделе описывается как создать HTML строку и загрузить ее в WebView для печати.

Данный объект обычно является частью разметки явления. Однако, если ваше приложение не использует WebView, вы должны создать экземпляр класса специально для печати. Главные шаги создания компонента печати:

  1. Создание объекта типа WebViewClient, который запустит печать после загрузки HTML ресурса.
  2. Загрузка HTML ресурса в объект WebView

Следующий код показывает, как создать экземпляр WebViewClient и загрузить HTML документ, созданный на лету:

Примечание: убедитесь, что запуск генерации задания на печать происходит в методе onPageFinished() объекта WebViewClient, который вы создали в предыдущем разделе. Если вы не дождетесь окончания загрузки страницы, печать может быть пустой, неполной или не произойти вовсе.

Примечание: в примере кода, представленном выше, экземпляр класса WebView сохраняется, чтобы его не уничтожил сборщик мусора до того, как задание на печать будет создано. Убедитесь, что в вашем приложении вы поступили точно также, иначе процесс печати может завершиться ошибкой.

Если вы хотите добавить графику на страницу, поместите графические файлы в директорию assets/ вашего проекта и укажите базовый URL в качестве первого параметра метода loadDataWithBaseURL(), как показано ниже:

Вы можете также загрузить web-страницу для печати, заменив метод loadDataWithBaseURL() на метод loadUrl(), как показано ниже:

При использовании класса WebView для печати документов, вы должны помнить о следующих ограничениях:

  • Вы не можете добавлять колонтитулы, включающие номера страниц документа.
  • Печать HTML документов не поддерживает печать диапазона страниц, например напечатать “со 2 по 4″ страницу HTML документа нельзя!
  • Экземпляр класса WebView может выполнять одновременно всего одно задание на печать.
  • HTML документы, включающие CSS опции печати, вроде свойства пейзажной ориентации, не поддерживаются.
  • Вы не можете использовать JavaScript в HTML документах, чтобы запустить печать.

Примечание: содержимое объекта WebView, который включен в разметку, может также быть распечатано после загрузки в него документа.

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

Создание задания на печать

После создания объекта WebView и загрузки HTML документа, ваше приложение почти достигло процесса печати. Осталось получит доступ к менеджеру печати PrintManager, создать адаптер печати и, наконец, создать задание на печать. В следующем примере показано выполнение всех трех составляющих:

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

Добавить комментарий