Android with java pdf

How to Generate a PDF file in Android App?

There are many apps in which data from the app is provided to users in the downloadable PDF file format. So in this case we have to create a PDF file from the data present inside our app and represent that data properly inside our app. So by using this technique we can easily create a new PDF according to our requirement. In this article, we will take a look at creating a new PDF file from the data present inside your Android app and saving that PDF file in the external storage of the users’ device. So for generating a new PDF file from the data present inside our Android app we will be using Canvas. Canvas is a predefined class in Android which is used to make 2D drawings of the different object on our screen. So in this article, we will be using canvas to draw our data inside our canvas, and then we will store that canvas in the form of a PDF. Now we will move towards the implementation of our project.

Example of Generating a PDF File

Below is the sample GIF in which we will get to know what we are going to build in this article. Note that this application is built using Java language. In this project, we are going to display a simple button. After clicking the button our PDF file will be generated and we can see this PDF file saved in our files.

Step by Step Implementation

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.

Источник

Android with java pdf

AndroidPdfViewer 1.x is available on AndroidPdfViewerV1 repo, where can be developed independently. Version 1.x uses different engine for drawing document on canvas, so if you don’t like 2.x version, try 1.x.

Library for displaying PDF documents on Android, with animations , gestures , zoom and double tap support. It is based on PdfiumAndroid for decoding PDF files. Works on API 11 (Android 3.0) and higher. Licensed under Apache License 2.0.

What’s new in 2.8.0?

  • Add handling of invalid pages, inspired by pull request #433. Exception on page opening crashed application until now, currently OnPageErrorListener set with Configurator#onPageError() is called. Invalid page color ( Color class) can be set using Configurator#invalidPageColor()
  • Implement canScrollVertically() and canScrollHorizontally() methods to work e.g. with SwipeRefreshLayout
  • Fix bug when Configurator#load() method was called before view has been measured, which resulted in empty canvas

2.8.1 fixes bug with rendering PDFView in Android Studio Layout Editor

2.8.2 fixes not loaded pages when using animated PDFView#jumpTo()

Changes in 2.0 API

  • Configurator#defaultPage(int) and PDFView#jumpTo(int) now require page index (i.e. starting from 0)
  • OnPageChangeListener#onPageChanged(int, int) is called with page index (i.e. starting from 0)
  • removed scrollbar
  • added scroll handle as a replacement for scrollbar, use with Configurator#scrollHandle()
  • added OnPageScrollListener listener due to continuous scroll, register with Configurator#onPageScroll()
  • default scroll direction is vertical, so Configurator#swipeVertical() was changed to Configurator#swipeHorizontal()
  • removed minimap and mask configuration

Add to build.gradle:

Library is available in jcenter repository, probably it’ll be in Maven Central soon.

Include PDFView in your layout

Load a PDF file

All available options with default values:

  • pages is optional, it allows you to filter and order the pages of the PDF as you need

Scroll handle is replacement for ScrollBar from 1.x branch.

From version 2.1.0 putting PDFView in RelativeLayout to use ScrollHandle is not required, you can use any layout.

To use scroll handle just register it using method Configurator#scrollHandle() . This method accepts implementations of ScrollHandle interface.

There is default implementation shipped with AndroidPdfViewer, and you can use it with .scrollHandle(new DefaultScrollHandle(this)) . DefaultScrollHandle is placed on the right (when scrolling vertically) or on the bottom (when scrolling horizontally). By using constructor with second argument ( new DefaultScrollHandle(this, true) ), handle can be placed left or top.

Читайте также:  Adobe illustrator draw для андроид полная версия

You can also create custom scroll handles, just implement ScrollHandle interface. All methods are documented as Javadoc comments on interface source.

Version 2.3.0 introduced document sources, which are just providers for PDF documents. Every provider implements DocumentSource interface. Predefined providers are available in com.github.barteksc.pdfviewer.source package and can be used as samples for creating custom ones.

Predefined providers can be used with shorthand methods:

Custom providers may be used with pdfView.fromSource(DocumentSource) method.

By default, generated bitmaps are compressed with RGB_565 format to reduce memory consumption. Rendering with ARGB_8888 can be forced by using pdfView.useBestQuality(true) method.

Double tap zooming

There are three zoom levels: min (default 1), mid (default 1.75) and max (default 3). On first double tap, view is zoomed to mid level, on second to max level, and on third returns to min level. If you are between mid and max levels, double tapping causes zooming to max and so on.

Zoom levels can be changed using following methods:

Why resulting apk is so big?

Android PdfViewer depends on PdfiumAndroid, which is set of native libraries (almost 16 MB) for many architectures. Apk must contain all this libraries to run on every device available on market. Fortunately, Google Play allows us to upload multiple apks, e.g. one per every architecture. There is good article on automatically splitting your application into multiple apks, available here. Most important section is Improving multiple APKs creation and versionCode handling with APK Splits, but whole article is worth reading. You only need to do this in your application, no need for forking PdfiumAndroid or so.

Why I cannot open PDF from URL?

Downloading files is long running process which must be aware of Activity lifecycle, must support some configuration, data cleanup and caching, so creating such module will probably end up as new library.

How can I show last opened page after configuration change?

You have to store current page number and then set it with pdfView.defaultPage(page) , refer to sample app

How can I fit document to screen width (eg. on orientation change)?

Use this code snippet:

If you have any suggestions on making this lib better, write me, create issue or write some code and send pull request.

Created with the help of android-pdfview by Joan Zapata

About

Android view for displaying PDFs rendered with PdfiumAndroid

Источник

Android with java pdf

Looking for new maintainer!

AndroidPdfViewer 1.x is available on AndroidPdfViewerV1 repo, where can be developed independently. Version 1.x uses different engine for drawing document on canvas, so if you don’t like 2.x version, try 1.x.

Library for displaying PDF documents on Android, with animations , gestures , zoom and double tap support. It is based on PdfiumAndroid for decoding PDF files. Works on API 11 (Android 3.0) and higher. Licensed under Apache License 2.0.

What’s new in 3.2.0-beta.1?

  • Merge PR #714 with optimized page load
  • Merge PR #776 with fix for max & min zoom level
  • Merge PR #722 with fix for showing right position when view size changed
  • Merge PR #703 with fix for too many threads
  • Merge PR #702 with fix for memory leak
  • Merge PR #689 with possibility to disable long click
  • Merge PR #628 with fix for hiding scroll handle
  • Merge PR #627 with fitEachPage option
  • Merge PR #638 and #406 with fixed NPE
  • Merge PR #780 with README fix
  • Update compile SDK and support library to 28
  • Update Gradle and Gradle Plugin

Changes in 3.0 API

  • Replaced Contants.PRELOAD_COUNT with PRELOAD_OFFSET
  • Removed PDFView#fitToWidth() (variant without arguments)
  • Removed Configurator#invalidPageColor(int) method as invalid pages are not rendered
  • Removed page size parameters from OnRenderListener#onInitiallyRendered(int) method, as document may have different page sizes
  • Removed PDFView#setSwipeVertical() method

Add to build.gradle:

or if you want to use more stable version:

Читайте также:  Во control android настроить

Library is available in jcenter repository, probably it’ll be in Maven Central soon.

If you are using ProGuard, add following rule to proguard config file:

Include PDFView in your layout

Load a PDF file

All available options with default values:

  • pages is optional, it allows you to filter and order the pages of the PDF as you need

Scroll handle is replacement for ScrollBar from 1.x branch.

From version 2.1.0 putting PDFView in RelativeLayout to use ScrollHandle is not required, you can use any layout.

To use scroll handle just register it using method Configurator#scrollHandle() . This method accepts implementations of ScrollHandle interface.

There is default implementation shipped with AndroidPdfViewer, and you can use it with .scrollHandle(new DefaultScrollHandle(this)) . DefaultScrollHandle is placed on the right (when scrolling vertically) or on the bottom (when scrolling horizontally). By using constructor with second argument ( new DefaultScrollHandle(this, true) ), handle can be placed left or top.

You can also create custom scroll handles, just implement ScrollHandle interface. All methods are documented as Javadoc comments on interface source.

Version 2.3.0 introduced document sources, which are just providers for PDF documents. Every provider implements DocumentSource interface. Predefined providers are available in com.github.barteksc.pdfviewer.source package and can be used as samples for creating custom ones.

Predefined providers can be used with shorthand methods:

Custom providers may be used with pdfView.fromSource(DocumentSource) method.

Version 3.0.0 introduced support for links in PDF documents. By default, DefaultLinkHandler is used and clicking on link that references page in same document causes jump to destination page and clicking on link that targets some URI causes opening it in default application.

You can also create custom link handlers, just implement LinkHandler interface and set it using Configurator#linkHandler(LinkHandler) method. Take a look at DefaultLinkHandler source to implement custom behavior.

Pages fit policy

Since version 3.0.0, library supports fitting pages into the screen in 3 modes:

  • WIDTH — width of widest page is equal to screen width
  • HEIGHT — height of highest page is equal to screen height
  • BOTH — based on widest and highest pages, every page is scaled to be fully visible on screen

Apart from selected policy, every page is scaled to have size relative to other pages.

Fit policy can be set using Configurator#pageFitPolicy(FitPolicy) . Default policy is WIDTH.

By default, generated bitmaps are compressed with RGB_565 format to reduce memory consumption. Rendering with ARGB_8888 can be forced by using pdfView.useBestQuality(true) method.

Double tap zooming

There are three zoom levels: min (default 1), mid (default 1.75) and max (default 3). On first double tap, view is zoomed to mid level, on second to max level, and on third returns to min level. If you are between mid and max levels, double tapping causes zooming to max and so on.

Zoom levels can be changed using following methods:

Why resulting apk is so big?

Android PdfViewer depends on PdfiumAndroid, which is set of native libraries (almost 16 MB) for many architectures. Apk must contain all this libraries to run on every device available on market. Fortunately, Google Play allows us to upload multiple apks, e.g. one per every architecture. There is good article on automatically splitting your application into multiple apks, available here. Most important section is Improving multiple APKs creation and versionCode handling with APK Splits, but whole article is worth reading. You only need to do this in your application, no need for forking PdfiumAndroid or so.

Why I cannot open PDF from URL?

Downloading files is long running process which must be aware of Activity lifecycle, must support some configuration, data cleanup and caching, so creating such module will probably end up as new library.

How can I show last opened page after configuration change?

You have to store current page number and then set it with pdfView.defaultPage(page) , refer to sample app

How can I fit document to screen width (eg. on orientation change)?

Use FitPolicy.WIDTH policy or add following snippet when you want to fit desired page in document with different page sizes:

Читайте также:  Навигаторы для android с ключом

How can I scroll through single pages like a ViewPager?

You can use a combination of the following settings to get scroll and fling behaviour similar to a ViewPager:

If you have any suggestions on making this lib better, write me, create issue or write some code and send pull request.

Created with the help of android-pdfview by Joan Zapata

About

Android view for displaying PDFs rendered with PdfiumAndroid

Источник

How to Build an Android PDF Viewer Using Java

In order to let users view PDF documents in an Android app, it’s common practice to defer this functionality to a third-party app on the user’s device. By doing so, developers won’t have to build their own PDF viewer from scratch, however this isn’t always the best solution. What if you want to view PDF documents directly in your app? Luckily, the Android SDK provides classes to handle PDF documents in apps running Android 5.0 or higher.

In this blog post, we’ll use PdfRenderer from the android.graphics.pdf package to create a basic PDF viewer in your Android app. Then, we’ll see how easy it is to implement a document viewer using the PDFTron SDK. Here are a few steps to get you started.

For reference, the sample code for this post can be found at Github.

View a PDF using the Android SDK

To keep things simple, we’re going to view a PDF file stored in the raw resource folder (i.e. res/raw/sample.pdf ). Your app will also need to set the minimum API level to 21 (Android 5.0).

Add PdfRenderer and PdfRenderer.Page member variables to your activity so that we can clean them up later. You’ll also need to add an ImageView to your activity in order to display the PDF:

In order for PdfRenderer to handle PDFs from the res/raw folder, we’ll need to copy the file and cache it locally. Add this method to your activity:

Then you can display a page from your PDF by loading it to an ImageView as a bitmap:

The sample above will look something like this:

As you can see, using PdfRenderer is an easy way to create a simple single-page PDF viewer in your Android app. However if you need users to interact with a PDF document, then I’m afraid you’re out of luck. The Android SDK does not provide any basic UI controls for PDF viewing like page zooming and scrolling, and PdfRenderer only supports opening one page at a time — you’ll need to write your own UI to handle user interaction and multi-page documents.

Additionally, PdfRenderer does not support password-protected or encrypted files, and uses PDFium for rendering which only works well with simple documents. You could run in to some rendering inconsistencies or failures when working with more complex or unsupported PDF documents. For a more stable and interactive viewing experience you’ll have to look elsewhere for a solution.

Fortunately, PDFTron’s Android PDF SDK comes with a fully-featured document viewer that includes these basic controls in addition to features such as:

Also it’s easy as pie to integrate with your Android app, here’s how!

View a PDF using PDFTron

We’ll be using DocumentActivity as our PDF viewer. Set up this activity as described in this short guide .

From your main activity, open the PDF document in DocumentActivity by calling:

That’s it! You now have a fully-featured document viewer in your Android app.

Out of the box, PDFTron provides an interactive document viewer that can be easily integrated into existing Android apps with dozens of features , giving users a better document viewing experience. What’s even better is that it’s highly customizable, allowing for feature customization and UI theming to fit all use-cases.

To get started just download our [free trial>(/documentation/android/get-started/) and explore our guides & documentation for our Android PDF library .

If you have any questions about PDFTron’s Android PDF SDK, please feel free to get in touch !

You can find the source code for this blog post at Github.

Источник

Оцените статью