Как использовать Android PdfRenderer

Вступление

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

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

Проблема

Работа с PDF-документами - одна из основных вещей, о которой большинство из нас не знает, потому что у нас нет возможности поработать над этим. На начальном этапе в Android не так просто открывать PDF-файлы, потому что не было средств визуализации или компонентов, которые могли бы их обрабатывать. Затем мы начали использовать браузеры или WebViews для обработки PDF-файлов следующим образом

Но есть проблема с использованием этого, не удавалось загружать документы PDF большого размера. По своему опыту могу сказать, что он показывает ошибку при попытке открыть документы размером более 10 МБ.

Хотя доступно множество библиотек, настроить библиотеку всегда было непросто. Затем мы запускали намерение средства просмотра PDF, которое побуждает пользователя покинуть наше приложение и перейти к любому другому приложению, которое может обрабатывать это содержимое PDF.

Это тоже не было предпочтительным решением.

Решение

Решение для открытия PDF-файлов решается введением класса PdfRenderer в Android-Lollipop (API 21). Давайте посмотрим, как мы можем использовать это в наших приложениях.

Что такое PdfRenderer?

PdfRenderer позволяет нам создать растровое изображение из страницы в документе PDF, чтобы мы могли отображать его на экране. Класс PdfRenderer не является потокобезопасным. Если мы хотим отобразить PDF-файл, нам сначала нужно получить ParcelFileDescriptor из файла, а затем создать экземпляр средства визуализации.

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

Используя этот PdfRenderer, мы отвечаем за обработку закрытия renderer и каждой страницы, которую мы открываем. Здесь мы можем одновременно открывать только одну страницу. Перед закрытием renderer нам нужно закрыть текущую открытую страницу. Давайте рассмотрим это на примере шаг за шагом.

Как использовать PdfRenderer?

Сначала давайте проверим основные шаги, прежде чем переходить к коду.

Шаг 1:

Получите доступный для поиска файловый дескриптор из нашего PDF-документа:

Шаг 2:

Теперь давайте создадим экземпляр PDFRenderer, используя ParcleFileDescriptor, полученный выше:

val renderer = PdfRenderer(pfd)

Шаг 3:

Давайте создадим экземпляр Bitmap с необходимыми размерами:

Шаг 4:

Не получить страницу для рендеринга с помощью PdfRenderer.Page, просто передав индекс страницы

val page = renderer.openPage(pageIndex)

Шаг 5:

Наконец, визуализируйте страницу в растровое изображение, созданное на шаге 3:

Шаг 6:

По завершении закройте страницу и средство визуализации.

page.close()   
renderer.close()

Пример

Давайте посмотрим, как открыть PDF-документ во фрагменте, указав Uri в качестве аргумента. Это всего лишь часть хранилища-образца из документации Android.

Наш пример - визуализировать документ, который в нашем случае является растровым изображением, поэтому нам нужен ImageView, поскольку он отображает по одной странице за раз, нам нужны две кнопки для перехода к следующей и предыдущей страницам, если они доступны. Давайте спроектируем XML

Теперь мы закончили с дизайном, давайте перейдем к части кодирования, это не что иное, как фрагмент, выполняющий все шаги, описанные выше.

Резюме

Теперь у вас должно быть общее представление об открытии документов PDF. Вы можете найти полный код примера открытия PDF-документа с помощью PDF-рендеринга на GitHub. Чтобы узнать больше о Котлине, ознакомьтесь с моими сообщениями

Ресурсы

PdfRenderer

Пожалуйста, дайте мне знать ваши предложения и комментарии.

Вы можете найти меня в Medium и LinkedIn

Спасибо за прочтение…