#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-очень тяжелая библиотека. В любом случае я связался с разработчиком библиотеки, упомянутой в сообщении, и нашел способ решить проблему.