Das Eigentum an dem Projekt wurde kürzlich geändert und wir suchen aktiv nach Mitwirkenden, um das Projekt zurück in die Strecke zu bringen. Bitte besuchen Sie
AndroidpdfViewer 1.x ist auf AndroidpdfVieWerv1 -Repo verfügbar, wo kann unabhängig entwickelt werden. Version 1.x verwendet eine andere Engine zum Zeichnen von Dokument auf Leinwand. Wenn Sie also 2.x Version nicht mögen, versuchen Sie 1.x.
Bibliothek zum Anzeigen von PDF -Dokumenten auf Android mit animations
, gestures
, zoom
und double tap
. Es basiert auf PDFIUMANDROID für die Dekodierung von PDF -Dateien. Funktioniert auf API 11 (Android 3.0) und höher. Lizenziert unter Apache Lizenz 2.0.
fitEachPage
-Option zusammenContants.PRELOAD_COUNT
PRELOAD_OFFSET
PDFView#fitToWidth()
entfernt (Variante ohne Argumente)Configurator#invalidPageColor(int)
-Methode, da ungültige Seiten nicht gerendert werdenOnRenderListener#onInitiallyRendered(int)
Methode, da das Dokument möglicherweise unterschiedliche Seitengrößen aufweistPDFView#setSwipeVertical()
Methode entfernt Add to Build.gradle :
implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
oder wenn Sie eine stabilere Version verwenden möchten:
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
Die Bibliothek ist im JCenter -Repository erhältlich, wahrscheinlich wird sie bald in Maven Central sein.
Wenn Sie Proguard verwenden, fügen Sie der Proguard -Konfigurationsdatei die folgende Regel hinzu:
-keep class com.shockwave.**
< com .github.barteksc.pdfviewer.PDFView
android : id = " @+id/pdfView "
android : layout_width = " match_parent "
android : layout_height = " match_parent " />
Alle verfügbaren Optionen mit Standardwerten:
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
sind optional und ermöglicht es Ihnen, die Seiten des PDF so zu filtern und zu bestellen, wie Sie benötigen Der Bildlaufgriff ist der Ersatz für die Scrollbar aus 1.x Branch.
Aus Version 2.1.0, die PDFView in RelATelAyout einlegt, um ScrollHandle zu verwenden, ist nicht erforderlich. Sie können ein beliebiges Layout verwenden.
Um das Scroll -Handle zu verwenden, registrieren Sie es einfach mithilfe von Configurator#scrollHandle()
. Diese Methode akzeptiert Implementierungen der ScrollHandle -Schnittstelle.
Es wird eine Standardimplementierung mit AndroidpdfViewer geschickt, und Sie können sie mit .scrollHandle(new DefaultScrollHandle(this))
verwenden. DefaultScrollHandle wird rechts (wenn Sie vertikal scrollen) oder unten (beim horizontalen Scrollen) platziert. Durch die Verwendung von Konstruktor mit zweitem Argument ( new DefaultScrollHandle(this, true)
) kann der Handle links oder oben platziert werden.
Sie können auch benutzerdefinierte Bildlaufgriffe erstellen und einfach die ScrollHandle -Schnittstelle implementieren. Alle Methoden werden als Javadoc -Kommentare zur Schnittstellenquelle dokumentiert.
Version 2.3.0 Einführte Dokumentquellen , die nur Anbieter für PDF -Dokumente sind. Jeder Anbieter implementiert eine Dokumentsource -Schnittstelle. Vordefinierte Anbieter sind in com.github.barneksc.pdfviewer.source -Paket verfügbar und können als Beispiele zum Erstellen benutzerdefinierter verwendet werden.
Vordefinierte Anbieter können mit Kurzmethoden verwendet werden:
pdfView.fromUri(Uri)
pdfView.fromFile(File)
pdfView.fromBytes(byte[])
pdfView.fromStream(InputStream)
pdfView.fromAsset(String)
Benutzerdefinierte Anbieter können mit pdfView.fromSource(DocumentSource)
-Methode verwendet werden.
Version 3.0.0 wurde Unterstützung für Links in PDF -Dokumenten eingeführt. Standardmäßig wird DefaultLinkHandler verwendet, und klicken Sie auf Link, auf die Referenzen im selben Dokument auf die Zielseite springen und auf den Link klicken, der auf einige URI abzielt, die dazu führt, dass sie in der Standardanwendung geöffnet werden.
Sie können auch benutzerdefinierte Link -Handler erstellen. Implementieren Sie einfach die LinkHandler -Schnittstelle und setzen Sie sie mithilfe Configurator#linkHandler(LinkHandler)
-Methode fest. Schauen Sie sich die DefaultLinkHandler -Quelle an, um benutzerdefiniertes Verhalten zu implementieren.
Seit Version 3.0.0 unterstützt die Bibliothek in 3 Modi an die Anpassung Seiten in den Bildschirm:
Abgesehen von der ausgewählten Richtlinie ist jede Seite skaliert, um die Größe im Verhältnis zu anderen Seiten zu haben.
Die Anpassungsrichtlinie kann mit Configurator#pageFitPolicy(FitPolicy)
festgelegt werden. Die Standardrichtlinie ist Breite .
Standardmäßig werden generierte Bitmaps mit RGB_565
-Format komprimiert , um den Speicherverbrauch zu verringern. Das Rendering mit ARGB_8888
kann mithilfe der pdfView.useBestQuality(true)
erzwungen werden.
Es gibt drei Zoomebenen: min (Standard 1), Mid (Standard 1,75) und Max (Standard 3). Beim ersten Doppelhack wird die Ansicht auf Mid Level, auf dem zweiten bis maximalen Level und auf dem dritten Rückkehr auf das min -Level vergrößert. Wenn Sie zwischen mittlerer und maximaler Ebene sind, veranlasst das doppelte Tippen zu maximalem Zoomen und so weiter.
Zoompegel können mit folgenden Methoden geändert werden:
void setMinZoom ( float zoom );
void setMidZoom ( float zoom );
void setMaxZoom ( float zoom );
Android PDFViewer hängt von PDFIUMANDROID ab, bei dem viele Architekturen ein nativer Bibliotheken (fast 16 MB) sind. APK muss alle diese Bibliotheken enthalten, um auf jedem auf dem Markt verfügbaren Gerät ausgeführt zu werden. Glücklicherweise ermöglicht es mit Google Play, mehrere APKs hochzuladen, z. B. jeweils pro Architektur. Es gibt einen guten Artikel über die automatische Aufteilung Ihrer Anwendung in mehrere APKs, die hier verfügbar sind. Der wichtigste Abschnitt ist die Verbesserung mehrerer APKs -Erstellungs- und Versionscode -Handhabung mit APK -Splits , aber der gesamte Artikel ist lesenswert. Sie müssen dies nur in Ihrer Bewerbung tun, ohne dass PDFIUMANDROID oder so gegabelt werden muss.
Das Herunterladen von Dateien ist langlebiger Prozess, der sich über den Aktivitätslebenszyklus bewusst sein muss, muss einige Konfigurationen, Datenreinigung und Caching unterstützen. Daher wird das Erstellen eines solchen Moduls wahrscheinlich als neue Bibliothek enden.
Sie müssen die aktuelle Seitennummer speichern und dann mit pdfView.defaultPage(page)
festlegen, siehe Beispiel -App
Verwenden Sie FitPolicy.WIDTH
-Richtlinien oder fügen Sie das folgende Snippet hinzu, wenn Sie mit verschiedenen Seitengrößen in das gewünschte Seite in das Dokument passen möchten:
Configurator . onRender ( new OnRenderListener () {
@ Override
public void onInitiallyRendered ( int pages , float pageWidth , float pageHeight ) {
pdfView . fitToWidth ( pageIndex );
}
});
Sie können eine Kombination aus den folgenden Einstellungen verwenden, um das Scroll- und Klappverhalten ähnlich einem Viewpager zu erhalten:
. swipeHorizontal ( true )
. pageSnap ( true )
. autoSpacing ( true )
. pageFling ( true )
Wenn Sie Vorschläge zur Verbesserung dieser LIB haben, schreiben Sie mir, erstellen Sie ein Problem oder schreiben Sie Code und senden Sie eine Pull -Anfrage.
Erstellt mit Hilfe von Android-PdfView von 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.