আমি কীভাবে কোনও ওয়েব ভিউতে পিডিএফ নথি প্রদর্শন করতে পারি?


115

আমি ওয়েবভিউতে পিডিএফ বিষয়বস্তু প্রদর্শন করতে চাই। আমার কোডটি এখানে:

WebView webview = new WebView(this); 
setContentView(webview);
webview.getSettings().setJavaScriptEnabled(true); 
webview.loadUrl("http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf");

আমি ফাঁকা স্ক্রিন পাচ্ছি। আমি ইন্টারনেট অনুমতিও সেট করে রেখেছি।

উত্তর:


170

আপনার পিডিএফ অনলাইনে পড়তে আপনি গুগল পিডিএফ ভিউয়ার ব্যবহার করতে পারেন:

WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true); 
String pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
webview.loadUrl("https://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);

1
হাই সূর্য, এখন অবধি যদি আপনি পিডিএফ পড়তে চান তবে আপনাকে অবশ্যই আপনার অ্যান্ড্রয়েড ফোনে একটি পিডিএফ রিডার ইনস্টল করতে হবে বা পিডিএফ ফাইল অনলাইনে রেন্ডার করতে ওয়েবভিউ ব্যবহার করতে হবে। দুঃখিত তবে আমরা পিডিএফ অফলাইনে পড়ার জন্য দ্বিতীয় পদ্ধতিটি ব্যবহার করতে পারি না।
anticafe

45
এটি 2 দিন অবিরামভাবে পরীক্ষা করার পরে, আমি গুগল ডক্স বলায় একটি ত্রুটি পেয়েছি You've reached the bandwidth limit for viewing or downloading files that aren't in Google Docs format....। তাই নির্ভরযোগ্য বলে মনে হয় না।
শোভিত পুরী

4
দস্তাবেজ url এখন ড্রাইভে পুনর্নির্দেশ করছে: " drive.google.com/viewerng/viewer?embedded=true&url= "
মারফি

31
এই সমাধানটি একেবারে ভয়ানক। আপনার অনেক লোক আপনার অ্যাপ্লিকেশনটিতে এই কুৎসিত কিছু স্থাপন করা বিবেচনা করে তা আমাকে চিন্তিত করে। এই পৃষ্ঠাটি ডেস্কটপের জন্য ডিজাইন করা হয়েছে। এই সাইটটি স্পষ্টভাবে ডেস্কটপের জন্য অনুকূলিত হয়েছে। এটি মোবাইলে ব্যবহার করা কোনও ভাল মোবাইল অভিজ্ঞতা নয়।
ক্লু

3
আপনি যদি অফলাইনে থাকেন?
yerlilbilgin

36

আপনি যদি কেবলমাত্র ইউআরএল ব্যবহার করেন তবে ব্যবহারকারীকে সেখানে গুগল অ্যাকাউন্টে লগইন করার প্রস্তাব দেওয়া হয় না।

https://docs.google.com/viewer?url=http://my.domain.com/yourPdfUrlHere.pdf

9

গুগল ডক্স ব্যবহার করে পিডিএফ খোলার ব্যবহারকারীর অভিজ্ঞতার দিক থেকে একটি খারাপ ধারণা। এটি সত্যই ধীর এবং প্রতিক্রিয়াবিহীন।

21 এর পরে সমাধান

21 এপ্রি থেকে, আমাদের পিডিএফআরেন্ডার রয়েছে যা পিডিএফকে বিটম্যাপে রূপান্তর করতে সহায়তা করে। আমি এটি কখনও ব্যবহার করি নি তবে এটি যথেষ্ট সহজ বলে মনে হচ্ছে।

যে কোনও এপিআই স্তরের জন্য সমাধান

অন্যান্য সমাধান হ'ল পিডিএফ ডাউনলোড এবং এটি ডেডিকেটেড পিডিএফ অ্যাপ্লিকেশনটিতে ইন্টেন্টের মাধ্যমে পাস করা যা এটি প্রদর্শিত একটি ব্যাঙ্কার কাজ করবে। দ্রুত এবং চমৎকার ব্যবহারকারীর অভিজ্ঞতা, বিশেষত যদি এই অ্যাপ্লিকেশনটিতে এই বৈশিষ্ট্যটি কেন্দ্রীয় না হয়।

পিডিএফ ডাউনলোড এবং খুলতে এই কোডটি ব্যবহার করুন

public class PdfOpenHelper {

public static void openPdfFromUrl(final String pdfUrl, final Activity activity){
    Observable.fromCallable(new Callable<File>() {
        @Override
        public File call() throws Exception {
            try{
                URL url = new URL(pdfUrl);
                URLConnection connection = url.openConnection();
                connection.connect();

                // download the file
                InputStream input = new BufferedInputStream(connection.getInputStream());
                File dir = new File(activity.getFilesDir(), "/shared_pdf");
                dir.mkdir();
                File file = new File(dir, "temp.pdf");
                OutputStream output = new FileOutputStream(file);

                byte data[] = new byte[1024];
                long total = 0;
                int count;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    output.write(data, 0, count);
                }

                output.flush();
                output.close();
                input.close();
                return file;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<File>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(File file) {
                    String authority = activity.getApplicationContext().getPackageName() + ".fileprovider";
                    Uri uriToFile = FileProvider.getUriForFile(activity, authority, file);

                    Intent shareIntent = new Intent(Intent.ACTION_VIEW);
                    shareIntent.setDataAndType(uriToFile, "application/pdf");
                    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    if (shareIntent.resolveActivity(activity.getPackageManager()) != null) {
                        activity.startActivity(shareIntent);
                    }
                }
            });
}

}

ইন্টেন্ট কাজ করার জন্য, ফাইলটি খোলার জন্য আপনাকে গ্রহণকারী অ্যাপ্লিকেশনটির অনুমতি দেওয়ার জন্য একটি ফাইলপ্রোভিডার তৈরি করতে হবে।

আপনি এটি কীভাবে প্রয়োগ করেন তা এখানে: আপনার ম্যানিফেস্টে:

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">

        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />

    </provider>

পরিশেষে রিসোর্স ফোলারে একটি ফাইল_প্যাথ.এক্সএমএল ফাইল তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path name="shared_pdf" path="shared_pdf"/>
</paths>

আশা করি এটি সাহায্য করে =)


1
শেয়ারড_পিডিএফ কি সম্পদের অধীনে একটি ডিরেক্টরি?
কোডজম্বি

1
এটি একটি দুর্দান্ত সমাধান।
কোডজম্বি

9

এই কোডটি ব্যবহার করুন:

private void pdfOpen(String fileUrl){

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setPluginState(WebSettings.PluginState.ON);

        //---you need this to prevent the webview from
        // launching another browser when a url
        // redirection occurs---
        webView.setWebViewClient(new Callback());

        webView.loadUrl(
                "http://docs.google.com/gview?embedded=true&url=" + fileUrl);

    }

    private class Callback extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(
                WebView view, String url) {
            return (false);
        }
    }

@ আথির কিডিলাম উত্তর
সামুইনিশের এখানে

7

এখানে অগ্রগতি ডায়ালগ সহ লোড করুন। ওয়েবক্লিয়েন্টকে দেওয়া দরকার অন্যথায় এটি ব্রাউজারে খোলার জন্য জোর করে:

final ProgressDialog pDialog = new ProgressDialog(context);
    pDialog.setTitle(context.getString(R.string.app_name));
    pDialog.setMessage("Loading...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    WebView webView = (WebView) rootView.findViewById(R.id.web_view);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            pDialog.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            pDialog.dismiss();
        }
    });
    String pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
    webView.loadUrl("https://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);

ওয়েবভিউতে পিডিএফ-এর জন্য অনুসন্ধান বৈশিষ্ট্যটি আমি কীভাবে সক্ষম করতে পারি
অনন্ত শাহ

4

আপনি মোজিলা pdf.js প্রকল্পটি ব্যবহার করতে পারেন । মূলত এটি আপনাকে পিডিএফ দেখায়। তাদের উদাহরণ একবার দেখুন ।

আমি এটি কেবল ব্রাউজারে (ডেস্কটপ এবং মোবাইল) ব্যবহার করি এবং এটি ভাল কাজ করে।


হাই @ প্যালো আপনি কী দয়া করে এন্ড্রয়েডের সাথে এটি ব্যবহার করবেন তা সম্পর্কে আমাকে উদাহরণ সরবরাহ করতে পারেন?
খালিদ এলসায়দ

1
: @KhalidElSayed আমি মনে করি যে butelo আপনার লক্ষ্য মধ্যে succeded করেছে stackoverflow.com/a/21383356/505893
নীলাভ

Pdf.js স্থানীয়ভাবে ব্যবহার করা যেতে পারে? আমার অর্থ এটি কী কোনও অ্যাপ্লিকেশনটিতে ব্যবহার করা যেতে পারে যা কোনও ল্যানটিতে ইন্টারনেট অ্যাক্সেসবিহীন ব্যবহৃত হয়, তবে কোনও স্থানীয় সার্ভারের সাথে যোগাযোগ করে?
কোডজম্বি

2

আসলে সমস্ত সমাধানগুলি বেশ জটিল ছিল এবং আমি একটি খুব সহজ সমাধান পেয়েছি (আমি নিশ্চিত নই যে এটি সমস্ত এসডিকে সংস্করণে উপলব্ধ কিনা)। এটি একটি পূর্বরূপ উইন্ডোতে পিডিএফ নথিটি খুলবে যেখানে ব্যবহারকারী দস্তাবেজটি দেখতে এবং সংরক্ষণ / ভাগ করতে সক্ষম হবে:

webView.setDownloadListener(DownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
     val i = Intent(Intent.ACTION_QUICK_VIEW)
     i.data = Uri.parse(url)
     if (i.resolveActivity(getPackageManager()) != null) {
            startActivity(i)
     } else {
            val i2 = Intent(Intent.ACTION_VIEW)
            i2.data = Uri.parse(url)
            startActivity(i2)
     }
})

(Kotlin)



@momadragabmomadborik ডাউনলোডলাইস্টেনার ক্লাসটি অ্যান্ড্রয়েডে অন্তর্ভুক্ত রয়েছে, উপরের কোডটি চালানোর জন্য আপনার কোনও অতিরিক্ত ক্লাসের দরকার নেই।
ডিওন

2
নোট করুন যে ACTION_QUICK_VIEW কেবল অ্যান্ড্রয়েড এন এবং উপরের দিকে সমর্থন করে।
কুমড়ো

@ পাম্পকি আপনি ঠিক বলেছেন, এটি আমার ক্ষেত্রে সমস্যা তৈরি করেছে। আমি উপরে কোডটি যুক্ত করেছি যে এটি দ্রুত দেখার জন্য উপলব্ধ কিনা তা পরীক্ষা করে। অন্যথায় এটি ব্রাউজারে খোলা হবে।
ডিওন

0

এখান থেকে উত্স কোডটি ডাউনলোড করুন ( ওয়েবভিউ অ্যান্ড্রয়েডে পিডিএফ খুলুন )

activity_main.xml

<RelativeLayout android:layout_width="match_parent"
                android:layout_height="match_parent"
                xmlns:android="http://schemas.android.com/apk/res/android">

    <WebView
        android:layout_width="match_parent"
        android:background="#ffffff"
        android:layout_height="match_parent"
        android:id="@+id/webview"></WebView>
</RelativeLayout>

MainActivity.java

package com.pdfwebview;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    WebView webview;
    ProgressDialog pDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    init();
    listener();
    }

    private void init() {

        webview = (WebView) findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);

        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setTitle("PDF");
        pDialog.setMessage("Loading...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        webview.loadUrl("https://drive.google.com/file/d/0B534aayZ5j7Yc3RhcnRlcl9maWxl/view");

    }

    private void listener() {
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                pDialog.show();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                pDialog.dismiss();
            }
        });
    }
}

আপনি একটি গুগল ড্রাইভ ফাইল খুলছেন, যা ডিভাইসের এসডি কার্ডের মতো কোনও পিডিএফ নয়
ওয়ানক্রিটের

হ্যাঁ এই ডেমোতে আমি গুগল ড্রাইভের পিডিএফ ফাইলটি প্রদর্শন করছি। আপনি যদি এসডিকার্ড থেকে আপনার পিডিএফটি দেখতে চান তবে এই ডেমোটি দেখুন। গভীর শিখাপুরি.ওয়ার্ডপ্রেস.কম
০৪ /

0

মন্তব্যগুলিতে উল্লিখিত ত্রুটি পাওয়ার আগে গুগল এটির আসল ব্যবহারের সীমাবদ্ধতা দেয় , যদি এটি আজীবন পিডিএফের মধ্যে একবার ব্যবহারকারীর অ্যাপে খোলার পরে আমি তার সম্পূর্ণ নিরাপদ বোধ করি। যদিও অ্যান্ড্রয়েড 5.0 / ললিপপ থেকে অ্যান্ড্রয়েডে বিল্ট ইন ফ্রেমওয়ার্ক ব্যবহার করে নেটিভ পদ্ধতির অনুসরণ করার পরামর্শ দেওয়া হলেও এটিকে পিডিএফেন্ডেন্ডার বলা হয়


"পিডিএফআরেন্ডারারের" লিঙ্কটি নষ্ট হয়ে গেছে।
নাট

@ এটিকে আমার নজরে আনার জন্য নেট ধন্যবাদ, আমি এটিকে সত্যই বুঝেছি, আমি লিঙ্কটি আপডেট করেছি, যেহেতু পিডিএফ রেন্ডারার একটি দেশীয় অ্যান্ড্রয়েড এপিআই, তারা ওয়েবসাইটে জিনিসগুলি স্থানান্তরিত করেছে, তাই ভবিষ্যতে যদি আপডেট লিঙ্কটি আবার ভাঙা হয় তবে তা হবে অ্যান্ড্রয়েড বিকাশকারী ওয়েবসাইটে অনুসন্ধান করা সেরা।
মিগটিয়ান

0
String webviewurl = "http://test.com/testing.pdf";
webView.getSettings().setJavaScriptEnabled(true); 
if(webviewurl.contains(".pdf")){
    webviewurl = "http://docs.google.com/gview?embedded=true&url=" + webviewurl;        }
webview.loadUrl(webviewurl);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.