2016-11-08 28 views
0

PDF的當前頁碼我要實現我的Android應用程序的自定義PDF閱讀器,我已經實現了這一點:如何讓Android的

https://github.com/barteksc/AndroidPdfViewer

要打開我的PDF我用這個功能:

/* Load PDF in the activity */ 
private void openPDF(){ 
    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/Download/verbale.pdf"); 
    PDFView pdfView = (PDFView) findViewById(R.id.pdfView); 

    pdfView.fromFile(file) 
      .defaultPage(0) 
      .enableAnnotationRendering(true) 
      .onLoad(this) 
      .onPageChange(this) 
      .scrollHandle(new DefaultScrollHandle(this)) 
      .load(); 
} 

PDF已正確呈現,但現在我需要在滾動過程中獲取頁面的頁碼。

我該怎麼做?

我曾嘗試使用此:

pdfView.getCurrentPage() 
pdfView.getPageCount() 

但並不是它不工作...

SOLUTION

@Override 
    public void loadComplete(int nbPages) { 
     totalPages = nbPages; 
    } 

@Override 
public void onPageChanged(int page, int pageCount) { 
    //Page contains che current page 
} 
+0

請留下您的問題作爲一個問題;解決方案將在下面發佈,作爲答案。 –

+0

@Max你做到了嗎?請幫助我,我需要實施它,但我每次都失敗了。請給我示例代碼來幫助我。在此先感謝 –

+0

@AhmerAfzal檢查我的編輯 – Max

回答

1

你可以看看AndroidPdfViewer的官方示例:Link


看看從例如這兩片段:

1)創建PDFView:

pdfView.fromAsset(SAMPLE_FILE) 
       .defaultPage(pageNumber) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .load(); 

2)和實施onPageChanged(..):

@Override 
public void onPageChanged(int page, int pageCount) { 
    pageNumber = page; 
    //do what you want with the pageNumber 
} 

也別忘了implement OnPageChangeListener

+0

最後一個問題:是否有可能提前知道頁數? – Max

+0

是檢查loadComplete() - > https://github.com/barteksc/AndroidPdfViewer/blob/master/sample/src/main/java/com/github/barteksc/sample/PDFViewActivity.java#L138 – IIIIIIIIIIIIIIIIIIIIII

+1

謝謝人 :) – Max

2
@EActivity(R.layout.activity_pdf_app_bar_main) 
@OptionsMenu(R.menu.options) 
public class PDFActivity extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener 
{ 
    private static final String TAG = PDFActivity.class.getSimpleName(); 
    private final static int REQUEST_CODE = 42; 
    public static final int PERMISSION_CODE = 42042; 
    public static final String SAMPLE_FILE = "myPDF.pdf"; 
    public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; 
    private int mCurrentPage = 0; 
    private final static String KEY_CURRENT_PAGE = "current_page"; 
    private ProgressDialog progressDialog; 
    @ViewById 
    PDFView pdfView; 
    @NonConfigurationInstance 
    Uri uri; 
    @NonConfigurationInstance 
    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) 
     { 
      Toast.makeText(this, R.string.toast_pick_file_error, Toast.LENGTH_SHORT).show(); 
     } 
    } 
    @AfterViews 
    void afterViews() 
    { 
     pdfView.setBackgroundColor(Color.WHITE); 
     if (uri != null) 
     { 
      displayFromUri(uri); 
     } 
     else 
     { 
      displayFromAsset(SAMPLE_FILE); 
     } 
     setTitle(pdfFileName); 
    } 

    private void displayFromAsset(String assetFileName) 
    { 
     pdfFileName = assetFileName; 
     pdfView.fromAsset(SAMPLE_FILE) 
       .defaultPage(mCurrentPage) 
       .enableSwipe(true) 
       .swipeHorizontal(false) 
       .enableDoubletap(true) 
       .password(null) 
       .enableAntialiasing(true) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onPageScroll(new OnPageScrollListener() { 
        @Override 
        public void onPageScrolled(int page, float positionOffset) { 
         Log.d(TAG, "onPageScrolled: page " + page + " positionOffset " + positionOffset); 
        } 
       }) 
       .onRender(new OnRenderListener() 
       { 
        @Override 
        public void onInitiallyRendered(int nbPages, float pageWidth, float pageHeight) 
        { 
         pdfView.fitToWidth(mCurrentPage); 
        } 
       }) 
       .onLoad(new OnLoadCompleteListener() { 
        @Override 
        public void loadComplete(int nbPages) { 
         Log.d(TAG, "loadComplete: totalPages " + nbPages); 
        } 
       }) 
       .onError(new OnErrorListener() { 
        @Override 
        public void onError(Throwable t) { 
         Log.d(TAG, " onError"); 
        } 
       }) 
       .scrollHandle(new DefaultScrollHandle(this)) 
       .spacing(2) 
       .load(); 
    } 
    private void displayFromUri(Uri uri) 
    { 
     pdfFileName = getFileName(uri); 
     pdfView.fromUri(uri) 
       .defaultPage(mCurrentPage) 
       .onPageChange(this) 
       .enableAnnotationRendering(true) 
       .onLoad(this) 
       .scrollHandle(new DefaultScrollHandle(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) 
    { 
     mCurrentPage = page; 
     setTitle(String.format("%s %s/%s", "Page Number", 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) 
    { 
     if (mCurrentPage >= 0) 
     { 
      pdfView.jumpTo(mCurrentPage); 
     } 
     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()); 
     Log.d(TAG, "totalPages " + nbPages); 
     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 + "-"); 
      } 
     } 
    } 
    @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 
    protected void onCreate(@Nullable Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState != null) 
     { 
      mCurrentPage = savedInstanceState.getInt(KEY_CURRENT_PAGE); 
     } 
     else 
     { 
      mCurrentPage = -1; 
     } 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) 
    { 
     super.onRestoreInstanceState(savedInstanceState); 
     mCurrentPage = savedInstanceState.getInt(KEY_CURRENT_PAGE); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 
     outState.putInt(KEY_CURRENT_PAGE, mCurrentPage); 
    } 
}