【问题标题】:How to show a page number on every page in a PDF using voghDev/PdfViewPager library?如何使用 voghDev/PdfViewPager 库在 PDF 的每一页上显示页码?
【发布时间】:2021-07-30 06:06:42
【问题描述】:

研究了好几天,我想不出办法。

这里是 Github 上图书馆的链接。 Library

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 的方法,但我没有成功:(我该怎么做?

【问题讨论】:

  • 是否需要在 pdfViewPager.addView(args..) 中添加一个视图,然后在上面设置页码,如果有人可以执行?

标签: java android pdf android-viewpager


【解决方案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,会有页码。

【讨论】:

  • 哪一行代码添加了页码?你也可以发布XML吗
  • 我已经完全更新了我最初的帖子,以便更加清晰。
【解决方案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,如果你不能将它转换成善意的评论,我也会帮你的!!。

【讨论】:

  • 这是一个很棒的库,但对我来说应用程序大小很重要,而且 barteksc/AndroidPdfViewer 是一个非常重的库。无论如何,我联系了帖子中提到的库的开发人员,我找到了解决问题的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2019-08-13
相关资源
最近更新 更多