- Android pdf to bitmap
- Convert a PDF to an Image on Android
- Android SDK
- PSPDFKit for Android
- Processing Rendered Bitmaps
- Inverting Bitmap Colors
- Adding Watermarks
- Conclusion
- Преобразование страницы Pdf в Bitmap в Android Java
- Преобразование страницы Pdf в Bitmap в Android Java
- Практический опыт работы с Bitmap средствами Android
Android pdf to bitmap
Pdfium Android binding with Bitmap rendering
Uses pdfium library from AOSP
The demo app (for not modified lib) is here
Forked for use with AndroidPdfViewer project.
API is highly compatible with original version, only additional methods were created.
What’s new in 1.9.0?
- Updated Pdfium library to 7.1.2_r36
- Changed gnustl_static to c++_shared
- Update Gradle plugins
- Update compile SDK and support library to 26
- Change minimum SDK to 14
- Add support for mips64
Add to build.gradle:
Library is available in jcenter and Maven Central repositories.
Version 1.8.0 added method for getting page size — PdfiumCore#getPageSize(. ) . It is important to note, that this method does not require page to be opened. However, there are also old PdfiumCore#getPageWidth(. ) , PdfiumCore#getPageWidthPoint(. ) , PdfiumCore#getPageHeight() and PdfiumCore#getPageHeightPoint() which require page to be opened.
This inconsistency will be resolved in next major version, which aims to redesign API.
Version 1.8.0 introduces PdfiumCore#getPageLinks(PdfDocument, int) method, which allows to get list of links from given page. Links are returned as List of type PdfDocument.Link . PdfDocument.Link holds destination page (may be null), action URI (may be null or empty) and link bounds in document page coordinates. To map page coordinates to screen coordinates you may use PdfiumCore#mapRectToDevice(. ) . See PdfiumCore#mapPageCoordsToDevice(. ) for parameters description.
Build native part
Go to PROJECT_PATH/src/main/jni and run command $ ndk-build . This step may be executed only once, every future .aar build will use generated libs.
Источник
Convert a PDF to an Image on Android
The most basic use case for any PDF library or framework is that of rendering PDF pages. This is useful whenever you are building a custom PDF viewer, need to preview PDF documents in your app, or just want to convert part of a PDF document to an image. This article shows how to do this using Android’s built-in PDF libraries and via PSPDFKit for Android.
Android SDK
The Android SDK has shipped with basic PDF support since API level 21 (Android 5.0). This API resides in a package, android.graphics.pdf , and it supports low-level operations such as creating PDF files and rendering pages to bitmaps.
We’ll use the following steps to render a page into a bitmap using this API:
First create an instance of PdfRenderer .
Open the page to be rendered. The page is represented as an instance of the PdfRenderer.Page class.
Create a destination Bitmap of the required size in the ARGB_8888 format.
Use the PdfRenderer.Page#render() method to render the page into the destination bitmap. You can also specify optional clipping to render only a part of the page, or a transformation matrix to transform the page content when rendering. If no transform is specified, the default transform that fits the whole page into a destination bitmap will be used.
Close the PdfRenderer.Page and PdfRenderer instances once you are done working with them.
The optional clip and transformation parameters of the PdfRenderer.Page#render() method are useful to, for example, implement tile rendering, which is where the page rendering is split into a grid of separate bitmaps. This has various benefits, ranging from faster rendering to lower memory usage when displaying zoomed rendering.
However, one caveat of the PdfRenderer API is that only a single page can be opened at a time. If you want concurrent rendering, you’ll need to create multiple PdfRenderer instances for the same document in each of your worker threads.
PSPDFKit for Android
The PdfRenderer API is fairly barebones. If you need additional control over page rendering — such as to include a custom drawing on the page, or to control the page color so that it’s rendered as grayscale or inverted — you need to write your own.
We at PSPDFKit offer a comprehensive PDF solution for Android and other platforms, along with first-class support included with every plan. PSPDFKit comes with a fully featured document viewer with a modern customizable user interface and a range of additional advanced features such as text extraction and search, full annotation and forms support, document editing, redaction, and much more.
The process of rendering PDFs into bitmaps in PSPDFKit is simple:
PSPDFKit’s PdfDocument API is thread-safe. It also includes various features that improve rendering performance, such as multithreaded rendering and a rendering cache.
We have a fully featured guide article that outlines the process of rendering pdf pages.
If you are interested in our solution, visit the Android product page to learn more and download a free trial.
Processing Rendered Bitmaps
Once you have your page rendered, you can show it in an ImageView in your UI. You can also process it further before it is displayed or shared with other services — for example, being used for printing or uploaded to your own backend. I’ll focus on the latter (processing pages) in the rest of this post.
The Android Canvas API provides powerful capabilities for editing your rendered bitmaps. Let me showcase some basic examples of what could be done with your rendered pages.
Inverting Bitmap Colors
Changing bitmap colors to inverted or grayscale is a common requirement of all sorts of applications, be it for accessibility use cases or just to improve the reading experience. So let’s look at an example of how to invert page colors.
First, create a target Bitmap of the required size and create a Canvas for drawing into it:
Then set the custom color filter for inverting colors on the Paint object:
Finally, draw the source bitmap onto the canvas with the custom Paint :
The image below shows the result.
As mentioned before, PSPDFKit supports inverted page rendering out of the box. This is done by setting the invertColors property in the page rendering configuration:
Adding Watermarks
Another frequent requirement is to add watermarks or logo graphics to rendered pages:
PSPDFKit ships with an easy-to-use API for adding watermarks to PDFs. Learn more about it in our Add a Watermark to a PDF on Android blog post.
Conclusion
In this post, we’ve shown how easy it is to render your PDF files to images using both Android’s built-in PDF libraries and PSPDFKit. If you wish to take this a step further and add PDF viewer functionality into your app, we’d recommend you read our Open a PDF in an Android App blog post, which provides an overview of the most used Android PDF libraries (both open source and commercial).
Источник
Преобразование страницы Pdf в Bitmap в Android Java
Мне нужно преобразовать PDF-файл (PDF-страницу) в растровый (или файл изображения) в Android.
1.Used Pdfbox jar от Apache. Но он использует некоторые классы Java, которые не поддерживаются в android. 2. Пробовал ящик Itext, который преобразует изображение в pdf (мне нужна его обратная операция). Подобно тому, что я пробовал много банок. Но никакого положительного результата нет.
Я получаю файл изображения,
Вместо,
Else, любой другой способ отобразить pdf-файл в android, используя функцию, встроенную в приложение?
Я решил эту проблему. Это так же просто, как дать устройству время отображать каждую страницу.
Чтобы исправить это, вам нужно только изменить
Во-первых, чтобы просмотреть PDF в Android, вам необходимо преобразовать PDF в изображения, а затем отобразить их пользователю. (Я собираюсь использовать веб-просмотр)
Поэтому для этого нам нужна эта библиотека . Это моя отредактированная версия этого git .
После того, как вы импортировали библиотеку в свой проект, вам необходимо создать свою активность.
Мы можем сделать это с помощью инструментария Qoppa PDF.
Шаги для использования инструментария Qoppa PDF.
Этот файл содержит четыре элемента:
- Version_history.txt – этот текстовый файл будет обновляться с каждой новой версией инструментария.
- Qoppapdf.jar – это основной файл jar для инструментария. Этот файл jar необходимо добавить в classpath для вашего проекта.
- Assets folder – эта папка содержит активы, используемые инструментарием, такие как шрифты и значки. После извлечения из zip-файлов вам нужно будет скопировать файлы внутри этой папки в папку с ресурсами в вашем проекте.
- Libs folder – эта папка содержит собственные библиотеки Android, эти библиотеки необходимы для декодирования некоторых изображений JPEG, а также изображений JPEG 2000, которые не поддерживаются Android. Содержимое папки libs необходимо скопировать в папку libs в вашем проекте. Если у вас нет папки libs в вашем проекте, создайте ее и скопируйте в нее содержимое этой папки.
Этот вопрос немного стар, но я должен был сделать то же самое сегодня, так что это мое решение:
Кроме того, я использую эту библиотеку . И мой pdf-файл содержит только одну страницу и является образом, может быть в других случаях, вам нужно обновить свой код.
Надеюсь, это поможет кому-то.
Я знаю, что этот вопрос старый, но на прошлой неделе я столкнулся с этой проблемой, и ни один из ответов не сработал для меня.
Вот как я решаю эту проблему без использования сторонних библиотек.
Основываясь на коде с сайта разработчиков Android с использованием класса PDFRenderer от android (API 21+), я написал следующий метод:
Метод возвращает массив растровых изображений, одно растровое изображение для каждой страницы в файле pdf.
Высота и ширина рассчитываются на основе этого ответа для создания изображений более высокого качества.
Источник
Преобразование страницы Pdf в Bitmap в Android Java
Мне нужно преобразовать PDF файл (PDF-страницу) в растровый (или файл изображения) в Android.
1. Используется банкомат Pdfbox от Apache. Но он использует некоторые классы Java, которые не поддерживаются в android.
2. Пробовал Itext jar, который преобразует изображение в pdf (мне нужна его обратная операция)
Например, я попробовал много банок. Но никакого положительного результата.
Я получаю файл изображения,
Вместо того,
Else, любой другой способ отображения pdf файла в android с использованием функции, встроенной в приложение?
Я решил эту проблему. это так же просто, как дать устройству время отображать каждую страницу.
Чтобы исправить это все, что вам нужно сделать, это изменить
Во-первых, чтобы просмотреть PDF в Android, вам нужно преобразовать PDF в изображения, а затем отобразить их пользователю. (Я собираюсь использовать веб-просмотр)
Чтобы сделать это, нам нужно это library. Это моя отредактированная версия этого git.
После того, как вы импортировали библиотеку в свой проект, вам нужно создать свою активность.
Я знаю, что этот вопрос старый, но на прошлой неделе я столкнулся с этой проблемой, и ни один из ответов на самом деле не работал у меня.
Вот как я решаю эту проблему без использования сторонних библиотек.
На основе кода разработчиков Android сайта с использованием класса android PDFRenderer (API 21+) я написал следующий метод:
метод возвращает массив растровых изображений, одно растровое изображение для каждой страницы в файле pdf.
Высота и ширина рассчитываются на основе этого ответа для создания изображений более высокого качества.
Этот вопрос немного стар, но я должен был сделать то же самое сегодня, так что это мое решение:
Кроме того, я использую library. И мой файл pdf содержит только одну страницу и является образом, может быть в других случаях, вам нужно обновить свой код.
Надеюсь, это поможет кому-то.
Вот код, надеюсь, что это поможет. Мне удалось отобразить все страницы в Bitmap.Cheers
Мы можем сделать это с помощью инструментария Qoppa PDF.
Шаги для использования инструментария Qoppa PDF.
Источник
Практический опыт работы с Bitmap средствами Android
Не так давно по долгу службы я столкнулся с одной задачей: нужно было придумать и реализовать дизайн медиа-плеера для Android. И если продумать и организовать более или менее сносное размещение элементов управления и информации оказалось делом не хитрым, то чтобы привнести в дизайн какую-то изюминку, пришлось хорошенько подумать. К счастью, в запасе у меня был такой элемент, как картинка с обложкой альбома проигрываемой мелодии. Именно он должен был добавить красок всей картинке.
Однако, будучи просто выведенной среди кнопок и надписей, обложка выглядела бумажным стикером, наклеенным на экран. Я понял, что без обработки изображения здесь не обойтись.
Некоторые раздумья насчёт того, что можно было бы тут придумать увенчались решением сделать для изображения обложки эффект отражения и тени. Сразу оговорюсь, что практическая реализация отражения не является моей оригинальной идеей. Её я подсмотрел в найденной англоязычной статье. В настоящем посте я лишь хочу привести некоторое осмысление производимых над изображением манипуляций, свои дополнения к процессу обработки и отметить некоторые нюансы работы с Bitmap в Android.
Итак, на входе я имел Bitmap с картинкой. Для начала я создал пустой Bitmap размером с оригинальную картинку, который позже должен был стать той же обложкой, но с нанесённой на неё тенью.
Этот метод создаёт изменяемый (что важно) Bitmap.
Здесь обязательно нужно отметить, что при работе с Bitmap’ами необходимо внимательно следить за памятью. Придётся ловить исключения. И ещё один момент: изучение профайлером показало, что перед вызовом метода createBitmap() работает сборщик мусора. Учтите это, если в вашем приложении скорость работы критична.
Далее я создал холст и нанёс на него исходное изображение.
В этом месте отмечу, что всегда, как только Bitmap становится не нужен, его нужно уничтожать методом recycle(). Дело в том, что объект этого типа представляет собой всего лишь ссылку на память с самим изображением и выглядит для сборщика мусора очень маленьким (хотя на самом деле памяти занято много). Это может привести к тому, что память закончится в самый неподходящий момент.
После всей подготовки я нанёс на холст краску с тенью.
RadialGradient в моём случае представляет тень, падающую по полукругу из правого верхнего угла изображения в центр нижней грани. Ему нужно установить центр (может выходить за пределы картинки), радиус, последовательность цветов и расстояния от центра по радиусу для каждого цвета. Для тени использовалось изменение альфы в цветах на радиусе.
LinearGradient использовался для фэйда краёв картинки. Его применение очень похоже на RadialGradient. Нужно задать начало и конец линии, вдоль которой пойдёт градиент, цвета и их позиции на этой линии.
Наконец, я приступил к рисованию отражения. К этому моменту у меня уже был Bitmap с нанесёнными тенями gradBitmap. Опять надо было создавать холст, создавать пустое изображение (на этот раз на треть длиннее оригинального), помещать его на холст и наносить на верх него Bitmap с тенями.
После недолгих приготовлений начиналось самое интересное. Я создал матрицу, переворачивающую изображение снизу вверх. С её помощью создал Bitmap из трети исходного и нанёс его на холст под оригинальным изображением.
Кстати, краткое замечание: в классе Bitmap существует несколько методов createBitmap, и лишь один из них создаёт изменяемые Bitmap’ы, на которых можно рисовать. Остальные для рисования НА них не годятся.
И наконец, нанесение прозрачного градиента для придания эффекта отражения.
Краска наносится на ту часть рисунка, которая является отражением.
Всё. Я получил refCover — Bitmap, на котором изображена обложка альбома с тенью, сглаженными краями и отражением.
P.S. В данной статье для меня был важен не сам факт достижения визуальных эффектов, а способы их получения и нюансы, с ними связанные. Если для кого-то вещи, описанные здесь, очевидны — прекрасно. Всем остальным, я надеюсь, статья поможет в написании своих приложений под Android.
UPD: картинки ДО и ПОСЛЕ
Источник