تم تغيير ملكية المشروع مؤخرًا ونحن نبحث بنشاط عن المساهمين لإعادة المشروع إلى المسار. يرجى زيارة
يتوفر AndroidPDFVIWER 1.x على repo AndroidPDFVIEWERV1 ، حيث يمكن تطويره بشكل مستقل. يستخدم الإصدار 1.x محركًا مختلفًا لرسم المستند على القماش ، لذلك إذا لم يعجبك الإصدار 2.x ، جرب 1.x.
مكتبة لعرض مستندات PDF على Android ، مع animations
gestures
zoom
ودعم double tap
. يعتمد على pdfiumandroid لفك تشفير ملفات PDF. يعمل على API 11 (Android 3.0) وأعلى. مرخصة بموجب ترخيص Apache 2.0.
fitEachPage
Contants.PRELOAD_COUNT
مع PRELOAD_OFFSET
PDFView#fitToWidth()
(متغير بدون وسيط)Configurator#invalidPageColor(int)
كما لا يتم تقديم صفحات غير صالحةOnRenderListener#onInitiallyRendered(int)
، حيث قد يكون للوثيقة أحجام صفحات مختلفةPDFView#setSwipeVertical()
طريقة أضف إلى build.gradle :
implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
أو إذا كنت ترغب في استخدام نسخة أكثر استقرارًا:
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
المكتبة متوفرة في مستودع JCenter ، وربما ستكون في Maven Central قريبًا.
إذا كنت تستخدم Proguard ، فأضف قاعدة التالية إلى ملف تكوين Proguard:
-keep class com.shockwave.**
< com .github.barteksc.pdfviewer.PDFView
android : id = " @+id/pdfView "
android : layout_width = " match_parent "
android : layout_height = " match_parent " />
جميع الخيارات المتاحة مع القيم الافتراضية:
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
اختيارية ، فهي تتيح لك تصفية وطلب صفحات PDF كما تحتاج مقبض التمرير هو استبدال شريط التمرير من فرع 1.x.
من الإصدار 2.1.0 وضع pdfview في Relativelayout لاستخدام ScrollHandle غير مطلوب ، يمكنك استخدام أي تصميم.
لاستخدام مقبض التمرير ، فقط قم بتسجيله باستخدام Method Configurator#scrollHandle()
. تقبل هذه الطريقة تطبيقات واجهة ScrollHandle .
هناك تطبيق افتراضي يتم شحنه باستخدام AndroidPDFVIEWER ، ويمكنك استخدامه مع .scrollHandle(new DefaultScrollHandle(this))
. يتم وضع DefaultScrollHandle على اليمين (عند التمرير رأسياً) أو في الأسفل (عند التمرير أفقيًا). باستخدام مُنشئ مع الوسيطة الثانية ( new DefaultScrollHandle(this, true)
) ، يمكن وضع المقبض يسارًا أو أعلى.
يمكنك أيضًا إنشاء مقابض تمرير مخصصة ، فقط قم بتنفيذ واجهة ScrollHandle . تم توثيق جميع الطرق كتعليقات Javadoc على مصدر الواجهة.
الإصدار 2.3.0 تم تقديم مصادر المستندات ، والتي هي مجرد مقدمي لمستندات PDF. كل مزود ينفذ واجهة DocumentSource . يتوفر مقدمو الخدمات المحددة مسبقًا في حزمة com.github.barteksc.pdfviewer.source ويمكن استخدامها كعينات لإنشاء تلك المخصصة.
يمكن استخدام مقدمي الخدمات المحددة مسبقًا مع طرق الاختزال:
pdfView.fromUri(Uri)
pdfView.fromFile(File)
pdfView.fromBytes(byte[])
pdfView.fromStream(InputStream)
pdfView.fromAsset(String)
يمكن استخدام مقدمي الخدمات المخصصين باستخدام طريقة pdfView.fromSource(DocumentSource)
.
الإصدار 3.0.0 قدم الدعم للروابط في مستندات PDF. افتراضيًا ، يتم استخدام DefaultLinkHandler والنقر فوق الارتباط الذي يتسبب في صفحة المرجع في نفس المستند إلى القفز إلى صفحة الوجهة والنقر على الرابط الذي يستهدف بعض URI يسبب فتحه في التطبيق الافتراضي.
يمكنك أيضًا إنشاء معالجات ارتباط مخصصة ، فقط قم بتنفيذ واجهة LinkHandler وتعيينها باستخدام طريقة Configurator#linkHandler(LinkHandler)
. ألق نظرة على مصدر DefaultLinkHandler لتنفيذ السلوك المخصص.
منذ الإصدار 3.0.0 ، تدعم المكتبة صفحات مناسبة في الشاشة في 3 أوضاع:
بصرف النظر عن السياسة المحددة ، يتم تحجيم كل صفحة لتكون حجمها بالنسبة إلى الصفحات الأخرى.
يمكن تعيين سياسة الملاءمة باستخدام Configurator#pageFitPolicy(FitPolicy)
. السياسة الافتراضية هو العرض .
بشكل افتراضي ، يتم ضغط نقار نقطات تم إنشاؤه بتنسيق RGB_565
لتقليل استهلاك الذاكرة. يمكن إجبار تقديم مع ARGB_8888
باستخدام طريقة pdfView.useBestQuality(true)
.
هناك ثلاثة مستويات تكبير: min (الافتراضي 1) ، منتصف (الافتراضي 1.75) و Max (الافتراضي 3). عند النقر المزدوج الأول ، يتم تكبير العرض إلى المستوى المتوسط ، في الثانية إلى المستوى الأقصى ، وعلى عائدات ثالثة إلى مستوى دقيقة. إذا كنت بين مستويات منتصف و MAX ، فإن التنصت المزدوج يؤدي إلى تكبير إلى حد أقصى وهلم جرا.
يمكن تغيير مستويات التكبير باستخدام الطرق التالية:
void setMinZoom ( float zoom );
void setMidZoom ( float zoom );
void setMaxZoom ( float zoom );
يعتمد Android PDFViewer على pdfiumandroid ، وهو مجموعة من المكتبات الأصلية (ما يقرب من 16 ميغابايت) للعديد من البنية. يجب أن تحتوي APK على جميع هذه المكتبات لتشغيلها على كل جهاز متوفر في السوق. لحسن الحظ ، تتيح لنا Google Play تحميل عدة محركات أقصى ، على سبيل المثال لكل بنية. هناك مقالة جيدة حول تقسيم التطبيق الخاص بك تلقائيًا إلى العديد من APKs ، متاح هنا. أهم قسم هو تحسين إنشاء APKs المتعددة ومعالجة الإصدار مع انشقاقات APK ، ولكن المقالة بأكملها تستحق القراءة. تحتاج فقط إلى القيام بذلك في التطبيق الخاص بك ، لا حاجة لربط pdfiumandroid أو نحو ذلك.
يعد تنزيل الملفات عملية طويلة المدى والتي يجب أن تكون على دراية بدورة حياة النشاط ، ويجب أن تدعم بعض التكوينات وتنظيف البيانات وتخزين المؤقت ، لذلك من المحتمل أن ينتهي إنشاء هذه الوحدة كمكتبة جديدة.
يجب عليك تخزين رقم الصفحة الحالي ثم تعيينه باستخدام pdfView.defaultPage(page)
، راجع نموذج التطبيق
استخدم سياسة FitPolicy.WIDTH
أو إضافة المقتطف التالي عندما تريد أن تناسب الصفحة المرغوبة في المستند بأحجام صفحات مختلفة:
Configurator . onRender ( new OnRenderListener () {
@ Override
public void onInitiallyRendered ( int pages , float pageWidth , float pageHeight ) {
pdfView . fitToWidth ( pageIndex );
}
});
يمكنك استخدام مزيج من الإعدادات التالية للحصول على سلوك التمرير والانتقال المشابه لـ ViewPager:
. swipeHorizontal ( true )
. pageSnap ( true )
. autoSpacing ( true )
. pageFling ( true )
إذا كان لديك أي اقتراحات حول جعل هذا lib أفضل ، فاكتب لي ، قم بإنشاء مشكلة أو كتابة بعض التعليمات البرمجية وأرسل طلب سحب.
تم إنشاؤها بمساعدة Android-PDFVIEW من قبل جوان زاباتا
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.