La propriété du projet a récemment été modifiée et nous recherchons activement des contributeurs pour ramener le projet à la piste. Veuillez visiter
AndroidpdfViewer 1.x est disponible sur AndroidPdfViewerv1, où peut être développé indépendamment. La version 1.x utilise différents moteurs pour dessiner un document sur Canvas, donc si vous n'aimez pas la version 2.x, essayez 1.x.
Bibliothèque pour afficher des documents PDF sur Android, avec animations
, gestures
, zoom
et de la prise en charge double tap
. Il est basé sur PDFiumAndroid pour le décodage des fichiers PDF. Fonctionne sur l'API 11 (Android 3.0) et plus. Licencié sous Apache Licence 2.0.
fitEachPage
Contants.PRELOAD_COUNT
par PRELOAD_OFFSET
PDFView#fitToWidth()
(variante sans arguments)Configurator#invalidPageColor(int)
Méthode car les pages non valides ne sont pas renduesOnRenderListener#onInitiallyRendered(int)
, car le document peut avoir des tailles de page différentesPDFView#setSwipeVertical()
Ajouter à Build.gradle :
implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
ou si vous souhaitez utiliser une version plus stable:
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
La bibliothèque est disponible dans le référentiel JCenter, il sera probablement bientôt dans Maven Central.
Si vous utilisez Proguard, ajoutez la règle suivante dans le fichier de configuration de Proguard:
-keep class com.shockwave.**
< com .github.barteksc.pdfviewer.PDFView
android : id = " @+id/pdfView "
android : layout_width = " match_parent "
android : layout_height = " match_parent " />
Toutes les options disponibles avec des valeurs par défaut:
pdfView . fromUri ( Uri )
or
pdfView . fromFile ( File )
or
pdfView . fromBytes ( byte [])
or
pdfView . fromStream ( InputStream ) // stream is written to bytearray - native code cannot use Java Streams
or
pdfView . fromSource ( DocumentSource )
or
pdfView . fromAsset ( String )
. pages ( 0 , 2 , 1 , 3 , 3 , 3 ) // all pages are displayed by default
. enableSwipe ( true ) // allows to block changing pages using swipe
. swipeHorizontal ( false )
. enableDoubletap ( true )
. defaultPage ( 0 )
// allows to draw something on the current page, usually visible in the middle of the screen
. onDraw ( onDrawListener )
// allows to draw something on all pages, separately for every page. Called only for visible pages
. onDrawAll ( onDrawListener )
. onLoad ( onLoadCompleteListener ) // called after document is loaded and starts to be rendered
. onPageChange ( onPageChangeListener )
. onPageScroll ( onPageScrollListener )
. onError ( onErrorListener )
. onPageError ( onPageErrorListener )
. onRender ( onRenderListener ) // called after document is rendered for the first time
// called on single tap, return true if handled, false to toggle scroll handle visibility
. onTap ( onTapListener )
. onLongPress ( onLongPressListener )
. enableAnnotationRendering ( false ) // render annotations (such as comments, colors or forms)
. password ( null )
. scrollHandle ( null )
. enableAntialiasing ( true ) // improve rendering a little bit on low-res screens
// spacing between pages in dp. To define spacing color, set view background
. spacing ( 0 )
. autoSpacing ( false ) // add dynamic spacing to fit each page on its own on the screen
. linkHandler ( DefaultLinkHandler )
. pageFitPolicy ( FitPolicy . WIDTH ) // mode to fit pages in the view
. fitEachPage ( false ) // fit each page to the view, else smaller pages are scaled relative to largest page.
. pageSnap ( false ) // snap pages to screen boundaries
. pageFling ( false ) // make a fling change only a single page like ViewPager
. nightMode ( false ) // toggle night mode
. load ();
pages
sont facultatives, il vous permet de filtrer et de commander les pages du PDF comme vous avez besoin La poignée de défilement remplace la barre de défilement à partir de la branche 1.x.
À partir de la version 2.1.0, mettre PDFView dans RelativeLayout pour utiliser ScrollHandle n'est pas requise, vous pouvez utiliser n'importe quelle disposition.
Pour utiliser le manche de défilement, inscrivez-le à l'aide de la méthode Configurator#scrollHandle()
. Cette méthode accepte les implémentations de l'interface ScrollHandle .
Il y a une implémentation par défaut expédiée avec AndroidPDFViewer, et vous pouvez l'utiliser avec .scrollHandle(new DefaultScrollHandle(this))
. DefaultScrollHandle est placé à droite (lors du défilement verticalement) ou en bas (lors du défilement horizontalement). En utilisant le constructeur avec le deuxième argument ( new DefaultScrollHandle(this, true)
), la poignée peut être placée à gauche ou en haut.
Vous pouvez également créer des poignées de défilement personnalisées, implémentez simplement l'interface ScrollHandle . Toutes les méthodes sont documentées comme des commentaires Javadoc sur la source d'interface.
La version 2.3.0 a introduit des sources de documents , qui ne sont que des fournisseurs de documents PDF. Chaque fournisseur implémente l'interface DocumentSource . Les fournisseurs prédéfinis sont disponibles dans com.github.barteksc.pdfviewer.source et peuvent être utilisés comme échantillons pour créer des échantillons.
Les fournisseurs prédéfinis peuvent être utilisés avec des méthodes scolareuses:
pdfView.fromUri(Uri)
pdfView.fromFile(File)
pdfView.fromBytes(byte[])
pdfView.fromStream(InputStream)
pdfView.fromAsset(String)
Les fournisseurs personnalisés peuvent être utilisés avec pdfView.fromSource(DocumentSource)
.
La version 3.0.0 a introduit la prise en charge des liens dans les documents PDF. Par défaut, DefaultLinkHandler est utilisé et en cliquant sur le lien qui fait référence à la page dans le même document provoque le saut sur la page de destination et clique sur le lien qui cible certaines causes URI l'ouvrant dans l'application par défaut.
Vous pouvez également créer des gestionnaires de liens personnalisés, il suffit d'implémenter l'interface LinkHandler et de le définir à l'aide de la méthode Configurator#linkHandler(LinkHandler)
. Jetez un œil à la source defaultLinkHandler pour implémenter un comportement personnalisé.
Depuis la version 3.0.0, la bibliothèque prend en charge les pages d'adaptation dans l'écran en 3 modes:
Outre la politique sélectionnée, chaque page est mise à l'échelle pour avoir la taille par rapport aux autres pages.
La stratégie d'ajustement peut être définie à l'aide Configurator#pageFitPolicy(FitPolicy)
. La stratégie par défaut est la largeur .
Par défaut, les bitmaps générés sont compressés avec le format RGB_565
pour réduire la consommation de mémoire. Le rendu avec ARGB_8888
peut être forcé à l'aide de la méthode pdfView.useBestQuality(true)
.
Il y a trois niveaux de zoom: min (par défaut 1), MID (par défaut 1.75) et max (par défaut 3). Lors du premier double robinet, la vue est zoomée au niveau intermédiaire, au deuxième niveau au niveau maximum et aux troisième rendements au niveau min. Si vous êtes entre les niveaux moyens et max, le double taraudage provoque le zoom au maximum et ainsi de suite.
Les niveaux de zoom peuvent être modifiés à l'aide des méthodes suivantes:
void setMinZoom ( float zoom );
void setMidZoom ( float zoom );
void setMaxZoom ( float zoom );
Android PDFViewer dépend de PdfiumAndroid, qui est défini de bibliothèques natives (près de 16 Mo) pour de nombreuses architectures. APK doit contenir toutes ces bibliothèques pour fonctionner sur chaque appareil disponible sur le marché. Heureusement, Google Play nous permet de télécharger plusieurs APK, par exemple un pour chaque architecture. Il y a un bon article sur la division automatique de votre application en plusieurs APK, disponibles ici. La section la plus importante consiste à améliorer la création de plusieurs APK et la manipulation du code de version avec APK Splits , mais un article entier vaut la peine d'être lu. Il vous suffit de le faire dans votre application, pas besoin de forking pdfiumAndroid ou du peu.
Le téléchargement de fichiers est un processus de longue durée qui doit être conscient du cycle de vie de l'activité, doit prendre en charge une configuration, un nettoyage et une mise en cache des données, donc la création d'un tel module finira probablement comme une nouvelle bibliothèque.
Vous devez stocker le numéro de page actuel, puis le définir avec pdfView.defaultPage(page)
, reportez-vous à un exemple d'application
Utilisez la stratégie FitPolicy.WIDTH
ou ajoutez un extrait suivant lorsque vous souhaitez intégrer la page souhaitée dans un document avec différentes tailles de page:
Configurator . onRender ( new OnRenderListener () {
@ Override
public void onInitiallyRendered ( int pages , float pageWidth , float pageHeight ) {
pdfView . fitToWidth ( pageIndex );
}
});
Vous pouvez utiliser une combinaison des paramètres suivants pour obtenir un comportement de défilement et de fling similaire à un viset:
. swipeHorizontal ( true )
. pageSnap ( true )
. autoSpacing ( true )
. pageFling ( true )
Si vous avez des suggestions pour améliorer cette lib, écrivez-moi, créez un problème ou écrivez du code et envoyez une demande de traction.
Créé à l'aide d'Android-PDFVIEW par Joan Zapata
Copyright 2017 Bartosz Schiller
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.