Как отобразить номер страницы на каждой странице PDF с помощью библиотеки voghDev/PdfViewPager?

#java #android #pdf #android-viewpager

Вопрос:

Это были дни исследований, и я не могу придумать, как это сделать.

Вот ссылка на библиотеку на Github. Библиотека

 public class PDFViewActivity1 extends AppCompatActivity {
    LinearLayout root;
    EditText etPdfUrl;
    Button btnDownload;
    PDFPagerAdapter adapter;
    String id;
    ArrayList<String> topicLink;
    File file;
    String filePath;

    PDFViewPager pdfViewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

        setContentView(R.layout.activity_p_d_f_view);

        root = (LinearLayout) findViewById(R.id.remote_pdf_root);
        final Context ctx = this;

        Intent intent = getIntent();
        String str = intent.getStringExtra("filePath");
        str = str;   // This contains the path of the PDF on my device
        Log.i("filePathInString", str);


        pdfViewPager = new PDFViewPager(ctx, str);
        pdfViewPager.setId(R.id.pdfViewPager);
        pdfViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        
        adapter = new PDFPagerAdapter(ctx, str);
        pdfViewPager.setAdapter(adapter);
        
        root.removeAllViewsInLayout();
        root.addView(pdfViewPager,
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ((PDFPagerAdapter) pdfViewPager.getAdapter()).close();
    }
    
}
 

PDF-файл отлично отображается на моем устройстве, но я не могу видеть номера страниц , заголовок, общее количество страниц PDF-файла при загрузке PDF-файла.

Это мой XML — файл

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/remote_pdf_root"
    android:orientation="vertical"
    android:background="#FFFFFF"
    tools:context=".PDFViewActivity1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

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


</LinearLayout>

 

Что мне делать, когда страница прокручивается , я ничего не могу понять, я перепробовал множество методов PDFAdapter, но безуспешно 🙁 Как я могу выполнить задачу ?

Комментарии:

1. Нужно ли мне добавить представление в pdfViewPager.addView(args..), а затем установить на нем номер страницы, если кто-нибудь может выполнить ?

Ответ №1:

 RelativeLayout remotePdfRoot = findViewById(R.id.remote_pdf_root);
    
remotePDFViewPager = new RemotePDFViewPager(this, downloadFileUrlConnection, url, listener);
remotePDFViewPager.setId(R.id.pdfViewPager);
    
//after file loading success
PDFPagerAdapter adapter = new PDFPagerAdapter(this, FileUtil.extractFileNameFromURL(url));
remotePDFViewPager.setAdapter(adapter);
updateLayout();
    
private void updateLayout() {
    remotePdfRoot.removeAllViewsInLayout();
    remotePdfRoot.addView(remotePDFViewPager, LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.WRAP_CONTENT);
}
 

Я просматриваю pdf таким образом, и там будет номер страницы.

Комментарии:

1. В какой строке кода добавляется номер страницы ? Можете ли вы также опубликовать XML

2. Я полностью обновил свой первоначальный пост, чтобы внести больше ясности.

Ответ №2:

Вы можете использовать https://github.com/barteksc/AndroidPdfViewer библиотека для этого, и вы можете получить количество страниц по

 `vpPdf.fromAsset("sample.pdf").onError {
        Log.i(TAG, "${it.localizedMessage}")
        it.printStackTrace()
     }.onPageError { _, t ->
        t.printStackTrace()
     }.enableSwipe(true).swipeHorizontal(true).onPageChange { page, pageCount ->
     //here page count is count of page user currently is viewing.
     }.load()`
 

Мне пришлось использовать эту библиотеку на работе, и она работает отлично!!
Приведенный выше код взят из kotlin,но вы можете преобразовать его в java, я думаю, если вы не сможете преобразовать его, пожалуйста, прокомментируйте, так что я тоже помогу вам с этим!!.

Комментарии:

1. Это отличная библиотека, но для меня важен размер приложения, а barteksc/AndroidPdfViewer-очень тяжелая библиотека. В любом случае я связался с разработчиком библиотеки, упомянутой в сообщении, и нашел способ решить проблему.