PDA

View Full Version : لود نشدن فایل pdf داخل وب ویو



samiasoft
جمعه 29 تیر 1397, 17:12 عصر
سلام دوستان

من فایل pdf را از داخل پوشه asset به مسیر زیر کپی کردم :

getFilesDir() +"/sample.pdf"

یعنی در اینجا هیچ مشکلی نیست و دقیق مطمئن هستم فایل در اون مسیر وجود دارد.

اما متاسفانه داخل وب ویو که میخوام لود کنم فقط صفحه سفید هست و هیچ چیزی نمایش نمیده...به نظرتون مشکل کجاست؟!!



دستور اجرای فایل :
webview_pdf.loadUrl("file:///" +getFilesDir() +"/sample.pdf");
webview_pdf.getSettings().setBuiltInZoomControls(t rue) ;//show zoom buttons
webview_pdf.getSettings().setSupportZoom(true);

دستورات لایوت :

<WebView android:id="@+id/webview_pdf"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

http://s8.picofile.com/file/8332274250/2018_07_20_171125.jpg
http://s9.picofile.com/file/8332274268/2018_07_20_174059.jpg

Restlesa
شنبه 30 تیر 1397, 21:13 عصر
سلام
در ویجت WebView به صورت پیش فرض قابلیت بارگذاری و نمایش اسناد PDF رو از روی حافظه داخلی دستگاه های اندوریدی وجود نداره.
برای نمایش یک فایل PDF در برنامه های اندرویدی می بایست یکی از سه کار زیر رو انجام بدی:

از یک کتابخانه شخص ثالث استفاده کنی
با استفاده از کلاس Intent از یه برنامه نمایش اسناد PDF داخلی خود دستگاه های اندرویدی استفاده کنی
از GoogleDoc در یک مرورگر وب استفاده کنی


مثالی از روش سوم
String myPdfUrl = "http://example.com/awesome.pdf";
String url = "http://docs.google.com/gview?embedded=true&url=" + myPdfUrl;
Log.i(TAG, "Opening PDF: " + url);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);

این روش به هیچ وجه توصیه نمیشه چرا که این روش یک ایده بسیار مزخرف از لحاظ تجربه کاربریه و سرعت لود اسناد بسیار آهسته و بدون پاسخه.

مثالی از روش دوم
File appFolder = new File(Environment.getExternalStorageDirectory(), context.getBaseContext().getPackageName());
File file = new File(appFolder, fileName);


Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


context.startActivity(intent);

بهترین و مطمئن ترین روش، روش دوم هستش. چرا که امروزه در تمامی گوشی های اندرویدی بصورت پیش فرض برنامه مخصوص نمایش اسناد PDF نصب هست.

اما اگه به هر دلیلی مایلی که اسناد PDF رو در برنامه خودت باز و به نمایش دربیاری می تونی از روش اول استفاده کنی.
برای این کار هم رو راه وجود داره:

راه اول اینه که اگه تو برنامه ات از API 21 به بالا استفاده می کنی می تونی از کلاس PDFRendered (https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.html) استفاده کنی. «فقط دقت داشته باش در صورتی که از این کلاس استفاده کنی برنامه ات در ورژن اندروید 5 به پایین کار نمی کنه»
راه دوم اینه که می تونی از یک ویجت مخصوص نمایش اسناد PDF استفاده کنی که آدرس سایتش رو توی لینک زیر گذاشتم. می تونی نحوه دانلود و استفاده از اون رو مطالعه کنی.

android-pdfview (https://github.com/JoanZapata/android-pdfview?utm_source=android-arsenal.com&utm_medium=referral&utm_campaign=1332)

samiasoft
یک شنبه 31 تیر 1397, 02:29 صبح
سپاسگزارم از نظر شما در این باره

علاوه برا مواردی که مطرح کردید بنده میخواستم کتابخانه ای استفاده کنم که قابلیت جستجو داخل pdf هم داشته باشه...برای همین یکی از دوستان pdf js رو بهم پیشنهاد دادند.

https://github.com/mozilla/pdfjs-dist

با استفاده از این من تونستم داخل وب ویو لودش کنم و فایل pdf رو بدین صورت نمایش بدم :

String filename = getFilesDir() +"/sample.pdf";
WebSettings settings = webview_pdfjs.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true);
settings.setDomStorageEnabled(true);
settings.setAllowUniversalAccessFromFileURLs(true) ;
settings.setBuiltInZoomControls(true);
webview_pdfjs.setWebChromeClient(new WebChromeClient());
webview_pdfjs.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + filename);

بدین صورت که فایل های pdf js رو داخل پوشه asset ریخته بودم و فایل pdf را در مسیر مربوطه کپی کرده بودم.
داخل اون بسته موجود در گیت هاب کل فایل ها نیاز نیست اگر خواستید تست کنید از این لینک زیر فایل ها رو دانلود کنید و داخل پوشه asset کپی کنید.
http://s8.picofile.com/file/8332306226/pdfjs.rar.html

اما متاسفانه مشکلی که مطرح هست اینه که این روش هم فقط در اندروید های 19 به بالا به درستی pdf رو اجرا میکنه و اندروید های پایینتر کار نمیکند.

من هرچقدر تلاش کردم مشکل رو حل کنم متاسفانه نتونستم کاری کنم...

همچنین با جستجویی که کردم انگار چند سال پیش هم دوستانی با این مشکل روبرو بودند :
https://stackoverflow.com/questions/25278813/show-pdf-file-in-android-webview-using-mozilla-pdf-js-android-api-level-below-19

که در پاسخ بهشون گفته شده ویرایش هایی داخل فایل pdf js انجام بدهند.

حالا جای بد ماجرا اینجاست که این دوستان از "pauldmps Android-pdf.js" استفاده کردند که قابلیت های خیلی کمتری هم انگارداره...اما من از ""mozilla pdfjs"" استفاده کردم ...که راه حلی برای حل مشکل در اندروید 17 و 18 پیدانکردم.

و نیازمند یاری شما دوستان برای حل این مشکل هستم:لبخندساده:

https://github.com/mozilla/pdf.js/releases

Restlesa
سه شنبه 02 مرداد 1397, 21:56 عصر
از مثال روش دومی که ارسال کردم استفاده کن بدون زحمت و دردسره و توی اکثر فروم ها هم همین روش پیشنهاد شده.