Zum Hauptinhalt springen

Beste Android-PDF-Bibliotheken

Beste Android-PDF-Bibliotheken dieses Jahr.

PDF steht für Portable Document Format. Es handelt sich um ein Dateiformat, das in den 1990er Jahren entwickelt wurde, um Dokumente, einschließlich Textformatierung und Bildern, unabhängig von Anwendungssoftware, Hardware und Betriebssystemen darzustellen.

PDF wurde erstmals vor 24 Jahren, im Jahr „15. Juni 1993“, von Adobe veröffentlicht, ist heute jedoch ein offener Standard, der von der International Organization for Standardization (ISO) gepflegt wird.

Es gibt zahlreiche kostenlose und kommerzielle PDF-Reader-Anwendungen für Android-Geräte. Allerdings sollten wir als Entwickler unsere eigenen kleinen PDF-Reader erstellen, die wir und unsere Freunde vielleicht nutzen können.

Es ist nicht so schwierig, wie Sie denken, und es gibt mehrere Open-Source-Bibliotheken, die dabei helfen.

In diesem Artikel werden wir uns einige dieser Bibliotheken und wahrscheinlich Ausschnitte aus deren Verwendung ansehen.

Lasst uns beginnen.

1. AndroidPdfViewer

Dies ist eine Open-Source-Bibliothek zur Anzeige von PDF-Dokumenten. Diese PDFs werden mit PdfiumAndroid gerendert.

AndroidPdfViewer ist derzeit die beliebteste Android PDF View-Bibliothek. Sie wird von bartesk verwaltet und er hat verschiedene Versionen der Bibliothek unabhängig voneinander veröffentlicht.

Beispielsweise verwenden viele Leute immer noch AndroidPdfView, es gibt jedoch ein AndroidPdfViewV1 und [AndroidPdfViewV2] (https://github.com/barteksc/AndroidPdfViewerV2).

Diese Bibliothek unterstützt „Animationen“, „Gesten“, „Zoom“ und „Doppeltippen“.

Die Verwendung dieser Bibliothek ist einfach, sehr einfach.

Zuerst fügen Sie es einfach in Ihr build.gradle auf App-Ebene ein:

implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'

Dann in Ihrem Layout:

<com.github.barteksc.pdfviewer.PDFView
android_id="@+id/pdfView"
android_layout_width="match_parent"
android_layout_height="match_parent"/>

Anschließend können Sie das PDF aus verschiedenen Quellen laden:

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)
.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)
.invalidPageColor(Color.WHITE) // color of page that is invalid and cannot be loaded
.load();

Beispiel

Hier ist ein Beispiel

@EActivity(R.layout.activity_main)
@OptionsMenu(R.menu.options)
public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener,
OnPageErrorListener {

private static final String TAG = PDFViewActivity.class.getSimpleName();

private final static int REQUEST_CODE = 42;
public static final int PERMISSION_CODE = 42042;

public static final String SAMPLE_FILE = "sample.pdf";
public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";

@ViewById
PDFView pdfView;

@NonConfigurationInstance
Uri uri;

@NonConfigurationInstance
Integer pageNumber = 0;

String pdfFileName;

@OptionsItem(R.id.pickFile)
void pickFile() {
int permissionCheck = ContextCompat.checkSelfPermission(this,
READ_EXTERNAL_STORAGE);

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
new String[]{READ_EXTERNAL_STORAGE},
PERMISSION_CODE
);

return;
}

launchPicker();
}

void launchPicker() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
try {
startActivityForResult(intent, REQUEST_CODE);
} catch (ActivityNotFoundException e) {
//alert user that file manager not working
Toast.makeText(this, R.string.toast_pick_file_error, Toast.LENGTH_SHORT).show();
}
}

@AfterViews
void afterViews() {
pdfView.setBackgroundColor(Color.LTGRAY);
if (uri != null) {
displayFromUri(uri);
} else {
displayFromAsset(SAMPLE_FILE);
}
setTitle(pdfFileName);
}

private void displayFromAsset(String assetFileName) {
pdfFileName = assetFileName;

pdfView.fromAsset(SAMPLE_FILE)
.defaultPage(pageNumber)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.spacing(10) // in dp
.onPageError(this)
.pageFitPolicy(FitPolicy.BOTH)
.load();
}

private void displayFromUri(Uri uri) {
pdfFileName = getFileName(uri);

pdfView.fromUri(uri)
.defaultPage(pageNumber)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.spacing(10) // in dp
.onPageError(this)
.load();
}

@OnActivityResult(REQUEST_CODE)
public void onResult(int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
uri = intent.getData();
displayFromUri(uri);
}
}

@Override
public void onPageChanged(int page, int pageCount) {
pageNumber = page;
setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}

public String getFileName(Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
if (result == null) {
result = uri.getLastPathSegment();
}
return result;
}

@Override
public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
Log.e(TAG, "title = " + meta.getTitle());
Log.e(TAG, "author = " + meta.getAuthor());
Log.e(TAG, "subject = " + meta.getSubject());
Log.e(TAG, "keywords = " + meta.getKeywords());
Log.e(TAG, "creator = " + meta.getCreator());
Log.e(TAG, "producer = " + meta.getProducer());
Log.e(TAG, "creationDate = " + meta.getCreationDate());
Log.e(TAG, "modDate = " + meta.getModDate());

printBookmarksTree(pdfView.getTableOfContents(), "-");

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {

Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}

/**
* Listener for response to user permission request
*
* @param requestCode Check that permission request code matches
* @param permissions Permissions that requested
* @param grantResults Whether permissions granted
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
@NonNull int[] grantResults) {
if (requestCode == PERMISSION_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
launchPicker();
}
}
}

@Override
public void onPageError(int page, Throwable t) {
Log.e(TAG, "Cannot load page " + page);
}
}

Referenz

NeinLin
1.Durchsuchen Beispiel
2.Weiterlesen
3.Direkter Download

2. PdfiumAndroid

Derselbe Autor von AndroidPdfViewer, bartesk, hat PdfiumAndroid aus seinem ursprünglichen Repository gespalten und einige davon gepflegt und hinzugefügt auch die Dokumentation.

Das ursprüngliche PdfiumAndroid wurde nicht gepflegt.

Die gegabelte Version verfügt also über einige Dokumentationen und wird aktiv gepflegt.

Er hat es gespalten, um es mit dem beliebten AndroidPdfViewer zu verwenden.

Sie können es jedoch auch unabhängig verwenden.

Zuerst müssten Sie es als Abhängigkeit hinzufügen:

implementation 'com.github.barteksc:pdfium-android:1.8.2'

Dann ist hier ein einfaches Beispiel:

void openPdf() {
ImageView iv = (ImageView) findViewById(R.id.imageView);
ParcelFileDescriptor fd = ...;
int pageNum = 0;
PdfiumCore pdfiumCore = new PdfiumCore(context);
try {
PdfDocument pdfDocument = pdfiumCore.newDocument(fd);

pdfiumCore.openPage(pdfDocument, pageNum);

int width = pdfiumCore.getPageWidthPoint(pdfDocument, pageNum);
int height = pdfiumCore.getPageHeightPoint(pdfDocument, pageNum);

// ARGB_8888 - best quality, high memory usage, higher possibility of OutOfMemoryError
// RGB_565 - little worse quality, twice less memory usage
Bitmap bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.RGB_565);
pdfiumCore.renderPageBitmap(pdfDocument, bitmap, pageNum, 0, 0,
width, height);
//if you need to render annotations and form fields, you can use
//the same method above adding 'true' as last param

iv.setImageBitmap(bitmap);

printInfo(pdfiumCore, pdfDocument);

pdfiumCore.closeDocument(pdfDocument); // important!
} catch(IOException ex) {
ex.printStackTrace();
}
}

public void printInfo(PdfiumCore core, PdfDocument doc) {
PdfDocument.Meta meta = core.getDocumentMeta(doc);
Log.e(TAG, "title = " + meta.getTitle());
Log.e(TAG, "author = " + meta.getAuthor());
Log.e(TAG, "subject = " + meta.getSubject());
Log.e(TAG, "keywords = " + meta.getKeywords());
Log.e(TAG, "creator = " + meta.getCreator());
Log.e(TAG, "producer = " + meta.getProducer());
Log.e(TAG, "creationDate = " + meta.getCreationDate());
Log.e(TAG, "modDate = " + meta.getModDate());

printBookmarksTree(core.getTableOfContents(doc), "-");

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {

Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
AnzeigenHerunterladen
AnzeigenDirekter Download

3. PDFBox-Android

PdfBox-Android ist eine Portierung der PdfBox-Bibliothek von Apache, die auf Android verwendet werden kann. Die meisten Funktionen sollten in der übergeordneten Bibliothek bereits in PdfBox-Android implementiert sein.

PdfBox-Android erfordert für die volle Funktionalität Android API 19 und höher.

PdfBox-Android ist eine weitere Bibliothek, mit der wir PDF-Dokumente rendern können. Es wurde von Tom Roush geschrieben und hat mehrere Mitwirkende.

Der Hauptcode des PdfBox-Android-Projekts ist unter der Apache 2.0-Lizenz lizenziert, die Sie [hier] finden (http://www.apache.org/licenses/LICENSE-2.0.html).

Diese Bibliothek existiert seit mehr als 4 Jahren, wird aber immer noch regelmäßig aktualisiert.

Installation von PDFBox-Android

So installieren Sie PDFBox-Android.

Gehen Sie zu build.gradle auf App-Ebene und fügen Sie die Implementierungsanweisung hinzu:

dependencies {
implementation 'com.tom-roush:pdfbox-android:1.8.10.3'
}

Sie können die neueste Version [hier] überprüfen (https://bintray.com/birdbrain2/PdfBox-Android/PdfBox-Android/1.8.10.0).

Wenn Sie Maven verwenden, dann:

<dependency>
<groupId>com.tom_roush</groupId>
<artifactId>pdfbox-android</artifactId>
<version>1.8.10.0</version>
<type>pom</type>
</dependency>

Bevor Aufrufe an PDFBox erfolgen, wird dringend empfohlen, den Ressourcenlader der Bibliothek zu initialisieren. Fügen Sie die folgende Zeile hinzu, bevor Sie PDFBox-Methoden aufrufen:

PDFBoxResourceLoader.init(getApplicationContext());

Beispiel

Hier ist ein Beispiel:

MainActivity.java

public class MainActivity extends Activity {
File root;
AssetManager assetManager;
Bitmap pageImage;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
protected void onStart() {
super.onStart();
setup();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

/**
* Initializes variables used for convenience
*/
private void setup() {
// Enable Android asset loading
PDFBoxResourceLoader.init(getApplicationContext());
// Find the root of the external storage.

root = getApplicationContext().getCacheDir();
assetManager = getAssets();
tv = (TextView) findViewById(R.id.statusTextView);
}

/**
* Creates a new PDF from scratch and saves it to a file
*/
public void createPdf(View v) {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);

// Create a new font object selecting one of the PDF base fonts
PDFont font = PDType1Font.HELVETICA;
// Or a custom font
// try
// {
// // Replace MyFontFile with the path to the asset font you'd like to use.
// // Or use LiberationSans "com/tom_roush/pdfbox/resources/ttf/LiberationSans-Regular.ttf"
// font = PDType0Font.load(document, assetManager.open("MyFontFile.TTF"));
// }
// catch (IOException e)
// {
// Log.e("PdfBox-Android-Sample", "Could not load font", e);
// }

PDPageContentStream contentStream;

try {
// Define a content stream for adding to the PDF
contentStream = new PDPageContentStream(document, page);

// Write Hello World in blue text
contentStream.beginText();
contentStream.setNonStrokingColor(15, 38, 192);
contentStream.setFont(font, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello World");
contentStream.endText();

// Load in the images
InputStream in = assetManager.open("falcon.jpg");
InputStream alpha = assetManager.open("trans.png");

// Draw a green rectangle
contentStream.addRect(5, 500, 100, 100);
contentStream.setNonStrokingColor(0, 255, 125);
contentStream.fill();

// Draw the falcon base image
PDImageXObject ximage = JPEGFactory.createFromStream(document, in);
contentStream.drawImage(ximage, 20, 20);

// Draw the red overlay image
Bitmap alphaImage = BitmapFactory.decodeStream(alpha);
PDImageXObject alphaXimage = LosslessFactory.createFromImage(document, alphaImage);
contentStream.drawImage(alphaXimage, 20, 20 );

// Make sure that the content stream is closed:
contentStream.close();

// Save the final pdf document to a file
String path = root.getAbsolutePath() + "/Created.pdf";
document.save(path);
document.close();
tv.setText("Successfully wrote PDF to " + path);

} catch (IOException e) {
Log.e("PdfBox-Android-Sample", "Exception thrown while creating PDF", e);
}
}

/**
* Loads an existing PDF and renders it to a Bitmap
*/
public void renderFile(View v) {
// Render the page and save it to an image file
try {
// Load in an already created PDF
PDDocument document = PDDocument.load(assetManager.open("Created.pdf"));
// Create a renderer for the document
PDFRenderer renderer = new PDFRenderer(document);
// Render the image to an RGB Bitmap
pageImage = renderer.renderImage(0, 1, ImageType.RGB);

// Save the render result to an image
String path = root.getAbsolutePath() + "/render.jpg";
File renderFile = new File(path);
FileOutputStream fileOut = new FileOutputStream(renderFile);
pageImage.compress(Bitmap.CompressFormat.JPEG, 100, fileOut);
fileOut.close();
tv.setText("Successfully rendered image to " + path);
// Optional: display the render result on screen
displayRenderedImage();
}
catch (IOException e)
{
Log.e("PdfBox-Android-Sample", "Exception thrown while rendering file", e);
}
}

/**
* Fills in a PDF form and saves the result
*/
public void fillForm(View v) {
try {
// Load the document and get the AcroForm
PDDocument document = PDDocument.load(assetManager.open("FormTest.pdf"));
PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();

// Fill the text field
PDTextField field = (PDTextField) acroForm.getField("TextField");
field.setValue("Filled Text Field");
// Optional: don't allow this field to be edited
field.setReadOnly(true);

PDField checkbox = acroForm.getField("Checkbox");
((PDCheckBox) checkbox).check();

PDField radio = acroForm.getField("Radio");
((PDRadioButton)radio).setValue("Second");

PDField listbox = acroForm.getField("ListBox");
List<Integer> listValues = new ArrayList<>();
listValues.add(1);
listValues.add(2);
((PDListBox) listbox).setSelectedOptionsIndex(listValues);

PDField dropdown = acroForm.getField("Dropdown");
((PDComboBox) dropdown).setValue("Hello");

String path = root.getAbsolutePath() + "/FilledForm.pdf";
tv.setText("Saved filled form to " + path);
document.save(path);
document.close();
} catch (IOException e) {
Log.e("PdfBox-Android-Sample", "Exception thrown while filling form fields", e);
}
}

/**
* Strips the text from a PDF and displays the text on screen
*/
public void stripText(View v) {
String parsedText = null;
PDDocument document = null;
try {
document = PDDocument.load(assetManager.open("Hello.pdf"));
} catch(IOException e) {
Log.e("PdfBox-Android-Sample", "Exception thrown while loading document to strip", e);
}

try {
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setStartPage(0);
pdfStripper.setEndPage(1);
parsedText = "Parsed text: " + pdfStripper.getText(document);
}
catch (IOException e)
{
Log.e("PdfBox-Android-Sample", "Exception thrown while stripping text", e);
} finally {
try {
if (document != null) document.close();
}
catch (IOException e)
{
Log.e("PdfBox-Android-Sample", "Exception thrown while closing document", e);
}
}
tv.setText(parsedText);
}

/**
* Creates a simple pdf and encrypts it
*/
public void createEncryptedPdf(View v)
{
String path = root.getAbsolutePath() + "/crypt.pdf";

int keyLength = 128; // 128 bit is the highest currently supported

// Limit permissions of those without the password
AccessPermission ap = new AccessPermission();
ap.setCanPrint(false);

// Sets the owner password and user password
StandardProtectionPolicy spp = new StandardProtectionPolicy("12345", "hi", ap);

// Setups up the encryption parameters
spp.setEncryptionKeyLength(keyLength);
spp.setPermissions(ap);
BouncyCastleProvider provider = new BouncyCastleProvider();
Security.addProvider(provider);

PDFont font = PDType1Font.HELVETICA;
PDDocument document = new PDDocument();
PDPage page = new PDPage();

document.addPage(page);

try
{
PDPageContentStream contentStream = new PDPageContentStream(document, page);

// Write Hello World in blue text
contentStream.beginText();
contentStream.setNonStrokingColor(15, 38, 192);
contentStream.setFont(font, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText("Hello World");
contentStream.endText();
contentStream.close();

// Save the final pdf document to a file
document.protect(spp); // Apply the protections to the PDF
document.save(path);
document.close();
tv.setText("Successfully wrote PDF to " + path);

}
catch (IOException e)
{
Log.e("PdfBox-Android-Sample", "Exception thrown while creating PDF for encryption", e);
}
}

/**
* Helper method for drawing the result of renderFile() on screen
*/
private void displayRenderedImage() {
new Thread() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView imageView = (ImageView) findViewById(R.id.renderedImageView);
imageView.setImageBitmap(pageImage);
}
});
}
}.start();
}
}

Referenz

Holen Sie sich PDFBox-Android unten:

Nein.StandortLink
1.GitHubBeispiel
2.GitHubDirekter Download
3.GitHubDurchsuchen

4. PDFViewPager

Android-Widget, das auf einer SD-Karte gespeicherte, als Assets verknüpfte oder von einer Remote-URL heruntergeladene PDF-Dokumente rendern kann.

Dieses Widget kann PDF-Dokumente in Ihren Aktivitäten oder Fragmenten anzeigen.

Wichtiger Hinweis: PDFViewPager verwendet die Klasse PdfRenderer, dieFunktioniert nur auf API 21 oder höher. Weitere Informationen finden Sie im Offiziellen Dokument.

Hier ist die Demo:

PDFViewpager

Schritt 1: Installieren Sie es

Installieren Sie es, indem Sie die folgende Implementierungsanweisung in Ihre build.gradle-Datei auf App-Ebene hinzufügen:

implementation 'es.voghdev.pdfviewpager:library:1.1.2'

Schritt 2: Schritt Zum Layout hinzufügen

PDFViewPager kann einer Seite deklarativ oder imperativ hinzugefügt werden. Um es deklarativ hinzuzufügen, fügen Sie Ihrem Layout Folgendes hinzu:

<es.voghdev.pdfviewpager.library.PDFViewPager
android:id="@+id/pdfViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

Schritt 3: Code schreiben

PDFs aus Asset-Ordner laden

Wenn sich Ihre PDF-Datei im Ordner „Assets“ befindet, kopieren Sie sie in das Cache-Verzeichnis.

CopyAsset copyAsset = new CopyAssetThreadImpl(context, new Handler());
copyAsset.copy(asset, new File(getCacheDir(), "sample.pdf").getAbsolutePath(

Anschließend können Sie es wie folgt laden:

<es.voghdev.pdfviewpager.library.PDFViewPager
android:id="@+id/pdfViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:assetFileName="sample.pdf"/>

oder so:

pdfViewPager = new PDFViewPager(this, "sample.pdf");

Geben Sie dann Ressourcen frei, indem Sie „close()“ wie folgt schließen:

@Override
protected void onDestroy() {
super.onDestroy();

((PDFPagerAdapter) pdfViewPager.getAdapter()).close();
}

PDFs von SD-Karte laden

Wenn sich Ihre PDFs auf der SD-Karte befinden, erstellen Sie ein PDFViewPager-Objekt und übergeben Sie dabei den Dateispeicherort auf Ihrer SD-Karte

PDFViewPager pdfViewPager = new PDFViewPager(context, getPdfPathOnSDCard());

protected String getPdfPathOnSDCard() {
File f = new File(getExternalFilesDir("pdf"), "adobe.pdf");
return f.getAbsolutePath();
}

Anschließend belegte Ressourcen freigeben:

    @Override
protected void onDestroy() {
super.onDestroy();

((PDFPagerAdapter) pdfViewPager.getAdapter()).close();
}

So laden Sie PDFs von Remote-Quellen

Fügen Sie zunächst die folgenden Berechtigungen zu Ihrem Android-Manifest hinzu:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Lassen Sie dann Ihre Aktivität oder Ihr Fragment „DownloadFile.Listener“ implementieren:

public class RemotePDFActivity extends AppCompatActivity implements DownloadFile.Listener {

Erstellen Sie dann ein RemotePDFViewPager-Objekt:

String url = "http://www.cals.uidaho.edu/edComm/curricula/CustRel_curriculum/content/sample.pdf";

RemotePDFViewPager remotePDFViewPager =
new RemotePDFViewPager(context, url, this);

Behandeln Sie dann die Ereignisse:

@Override
public void onSuccess(String url, String destinationPath) {
// That's the positive case. PDF Download went fine

adapter = new PDFPagerAdapter(this, "AdobeXMLFormsSamples.pdf");
remotePDFViewPager.setAdapter(adapter);
setContentView(remotePDFViewPager);
}

@Override
public void onFailure(Exception e) {
// This will be called if download fails
}

@Override
public void onProgressUpdate(int progress, int total) {
// You will get download progress here
// Always on UI Thread so feel free to update your views here
}

Und natürlich den Adapter schließen:

@Override
protected void onDestroy() {
super.onDestroy();

adapter.close();
}

Vollständige Beispiele finden Sie unten.

Referenz

Nein.Link
1.Durchsuchen Beispiele
2.Lesen mehr
3.Folgen Bibliotheksautor