ความเป็นเจ้าของของโครงการเปลี่ยนไปเมื่อเร็ว ๆ นี้และเรากำลังมองหาผู้มีส่วนร่วมเพื่อนำโครงการกลับมาติดตาม กรุณาเยี่ยมชม
AndroIDPDFViewer 1.x มีให้บริการบน AndroidPDFViewERV1 Repo ซึ่งสามารถพัฒนาได้อย่างอิสระ เวอร์ชัน 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 ให้เพิ่มกฎต่อไปนี้ในไฟล์ config 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))
ค่าเริ่มต้นของ CrollHandle จะถูกวางไว้ทางด้านขวา (เมื่อเลื่อนในแนวตั้ง) หรือที่ด้านล่าง (เมื่อเลื่อนในแนวนอน) โดยการใช้ตัวสร้างที่มีอาร์กิวเมนต์ที่สอง ( 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 โหมด:
นอกเหนือจากนโยบายที่เลือกแล้วทุกหน้าจะถูกปรับขนาดให้มีขนาดเทียบกับหน้าอื่น ๆ
นโยบาย FIT สามารถตั้งค่าได้โดยใช้ Configurator#pageFitPolicy(FitPolicy)
นโยบายเริ่มต้นคือ ความกว้าง
โดยค่าเริ่มต้นบิตแมปที่สร้างขึ้นจะถูก บีบอัด ด้วยรูปแบบ RGB_565
เพื่อลดการใช้หน่วยความจำ การเรนเดอร์ด้วย ARGB_8888
สามารถถูกบังคับโดยใช้วิธี pdfView.useBestQuality(true)
มีสามระดับการซูม: ขั้นต่ำ (ค่าเริ่มต้น 1), กลาง (ค่าเริ่มต้น 1.75) และสูงสุด (ค่าเริ่มต้น 3) ในการแตะสองครั้งแรกมุมมองจะถูกซูมถึงระดับกลางในระดับที่สองถึงระดับสูงสุดและเมื่อกลับมาถึงระดับที่สาม หากคุณอยู่ระหว่างระดับกลางถึงระดับสูงสุดการแตะสองครั้งจะทำให้การซูมไปที่สูงสุดและอื่น ๆ
ระดับการซูมสามารถเปลี่ยนแปลงได้โดยใช้วิธีการต่อไปนี้:
void setMinZoom ( float zoom );
void setMidZoom ( float zoom );
void setMaxZoom ( float zoom );
Android PDFViewer ขึ้นอยู่กับ PDFiumandroid ซึ่งเป็นชุดของไลบรารีพื้นเมือง (เกือบ 16 MB) สำหรับสถาปัตยกรรมจำนวนมาก APK ต้องมีไลบรารีทั้งหมดนี้เพื่อทำงานบนอุปกรณ์ทุกชิ้นที่มีอยู่ในตลาด โชคดีที่ Google Play ช่วยให้เราสามารถอัปโหลด APK หลายตัวเช่นหนึ่งต่อสถาปัตยกรรมทุกอย่าง มีบทความที่ดีเกี่ยวกับการแยกแอปพลิเคชันของคุณออกเป็น APK หลายรายการโดยอัตโนมัติ ส่วนที่สำคัญที่สุดคือ การปรับปรุงการสร้าง APKs หลายรายการและการจัดการรหัส VersionCode ด้วยการแยก 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 โดย 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.