Значит про конвертацию PDF в картинку мы поговорили, а вот про конвертацию PowerPoint слайдов в картинки мы еще не видели. По сути проект такой же как и предыдущий, структуру он будет иметь такую же, я не знаю зачем я пишу отдельную статью, наверно для удобства что бы не мешать колбасу с макаронами. В любом случае я создал два проекта на гитхабе и полезней когда функции разделены для примера в разные проекты, ну мне так кажется.
Написание данной функции такое же как и в предыдущей статье, пришлось выкручиваться так как просмотрщиков ppt файлов особо нет, по этому приходится разделять слайды на картинки и потом собирать их в том же ViewPager. Опять же, в примере я буду получать всего одну картинку, но если захотеть то можно в цикле получать весь список слайдов и потом сохранять их и отображать в ViewPager.
В проекте как всегда будем использовать библиотеки. Самая главная либа которая нас интересует это POI которая позволяет читать Microsoft'овские файлы, просто всемогущая библиотека. Я уже писал про нее как-то пару лет назад, там я разбирал как читать Excel файлы, как оказалось опыт 2х годичной давности пригодился. Так же у нас будет Dexter для запроса пермишена на чтение и запись и ButterKnife для удобного поиска вьюх в xml.
app/build.gradle
После подключения всех либ, мы как и в предыдущем проекте должны создать ImageFilePathUtils, что бы не постить его во второй раз я просто оставлю ссылку на него на GitHub, все равно все исходники доступны там.
Этот класс нам нужен для удобного преобразования ссылки на файл полученный в onActivityResult() после того как мы достанем его из файлового менеджера.
Дальше нам нужно создать AsyncTask который будет конвертировать файл. Опять же как и в предыдущем проекте я не буду использовать Rx потому что простота тут на первом месте, по этому кому надо тот переделает этот AsynkTask в вид RxAndroid'a.
PPTToImageTask.java
В этом классе нас интересует метод doInBackground() в котором происходит вся конвертация. В нем мы получаем ссылку на файл дальше после проверок расширения файла и создания пустого для записи мы переходим к разбиванию файла с помощью класса POIFSFileSystem в который мы передали ссылку на файл, дальше методов getPictures() мы получили массив картинок со слайдера и с помощью не сложных махинаций pdata[0] получили первый слайд, ну и дальше сохраняем это все в файл — картинку и передаем ссылку на этот файл в колбек который возвращает эту ссылку в activity.
Дальше в активити мы просто отображаем то, что у нас вышло в конвертации.
activity_main.xml
Разметка у нас будет выглядеть так же как и в предыдущей статье, у нас будет картинка и прогресс бар который будет отображать прогресс конвертации. Ну и картинка по нажатию на которую у нас будет открываться выбор файла, и после выбора в ней будем отображать собственно то, что у нас получилось.
MainActivity будет выглядеть точь в точь так же как и в предыдущей статье, отличаться будет только метод onActivityResult() в котором вместо PDFToImageTask будет вызываться PPTToImageTask.
MainActivity.java
Здесь у нас в onCreate() мы инициализируем ButterKnife для удобной работы с вьюхами и инициализируем Dexter для удобства создания запроса на доступ к чтению и записи файлов. Дальше у нас вызывается по клику на картинку метод onImageClick(), который открывает доступный файловый менеджер. После выбора файла у нас вызывается onActivityResult() в котором у нас идет вызов PPTToImageTask для конвертации файла в картинку и отображение прогресс бара пока картинка будет конвертироваться. И в конце вызывается onFileWasConverted() который отображает нашу картинку в ImageView и прячет прогресс бар.
Как и в предыдущей статье нам нужны разрешения на доступ в манифесте, по этому не забываем добавить их.
AndroidManifest.xml
Я честно не знаю почему я разбил это все на две статьи, но раз уж на то пошло пусть так и будет, возможно это даже к лучшему. Дальше по идее компилируем проект и все должно быть нормально, нажимаем на иконку приложения по центру экрана, выбираем файл в появившемся окне выбора и ждем когда появится картинка. Радуемся.
Исходники:
GitHub
Написание данной функции такое же как и в предыдущей статье, пришлось выкручиваться так как просмотрщиков ppt файлов особо нет, по этому приходится разделять слайды на картинки и потом собирать их в том же ViewPager. Опять же, в примере я буду получать всего одну картинку, но если захотеть то можно в цикле получать весь список слайдов и потом сохранять их и отображать в ViewPager.
В проекте как всегда будем использовать библиотеки. Самая главная либа которая нас интересует это POI которая позволяет читать Microsoft'овские файлы, просто всемогущая библиотека. Я уже писал про нее как-то пару лет назад, там я разбирал как читать Excel файлы, как оказалось опыт 2х годичной давности пригодился. Так же у нас будет Dexter для запроса пермишена на чтение и запись и ButterKnife для удобного поиска вьюх в xml.
app/build.gradle
После подключения всех либ, мы как и в предыдущем проекте должны создать ImageFilePathUtils, что бы не постить его во второй раз я просто оставлю ссылку на него на GitHub, все равно все исходники доступны там.
Этот класс нам нужен для удобного преобразования ссылки на файл полученный в onActivityResult() после того как мы достанем его из файлового менеджера.
Дальше нам нужно создать AsyncTask который будет конвертировать файл. Опять же как и в предыдущем проекте я не буду использовать Rx потому что простота тут на первом месте, по этому кому надо тот переделает этот AsynkTask в вид RxAndroid'a.
PPTToImageTask.java
В этом классе нас интересует метод doInBackground() в котором происходит вся конвертация. В нем мы получаем ссылку на файл дальше после проверок расширения файла и создания пустого для записи мы переходим к разбиванию файла с помощью класса POIFSFileSystem в который мы передали ссылку на файл, дальше методов getPictures() мы получили массив картинок со слайдера и с помощью не сложных махинаций pdata[0] получили первый слайд, ну и дальше сохраняем это все в файл — картинку и передаем ссылку на этот файл в колбек который возвращает эту ссылку в activity.
Дальше в активити мы просто отображаем то, что у нас вышло в конвертации.
activity_main.xml
Разметка у нас будет выглядеть так же как и в предыдущей статье, у нас будет картинка и прогресс бар который будет отображать прогресс конвертации. Ну и картинка по нажатию на которую у нас будет открываться выбор файла, и после выбора в ней будем отображать собственно то, что у нас получилось.
MainActivity будет выглядеть точь в точь так же как и в предыдущей статье, отличаться будет только метод onActivityResult() в котором вместо PDFToImageTask будет вызываться PPTToImageTask.
MainActivity.java
Здесь у нас в onCreate() мы инициализируем ButterKnife для удобной работы с вьюхами и инициализируем Dexter для удобства создания запроса на доступ к чтению и записи файлов. Дальше у нас вызывается по клику на картинку метод onImageClick(), который открывает доступный файловый менеджер. После выбора файла у нас вызывается onActivityResult() в котором у нас идет вызов PPTToImageTask для конвертации файла в картинку и отображение прогресс бара пока картинка будет конвертироваться. И в конце вызывается onFileWasConverted() который отображает нашу картинку в ImageView и прячет прогресс бар.
Как и в предыдущей статье нам нужны разрешения на доступ в манифесте, по этому не забываем добавить их.
AndroidManifest.xml
Я честно не знаю почему я разбил это все на две статьи, но раз уж на то пошло пусть так и будет, возможно это даже к лучшему. Дальше по идее компилируем проект и все должно быть нормально, нажимаем на иконку приложения по центру экрана, выбираем файл в появившемся окне выбора и ждем когда появится картинка. Радуемся.
Исходники:
GitHub
Комментариев нет:
Отправить комментарий