[在Android中显示uri中的PDF

问题描述 投票:0回答:1

我正在从api获取pdf文件,而我得到了类似的内容http://x/docs/document1

在我的android项目中,我是这样的:

try{
   Android.Content.Intent activity = new Android.Content.Intent(this, typeof(WebViewPDF));
   activity.AddFlags(Android.Content.ActivityFlags.GrantReadUriPermission);
   activity.AddFlags(Android.Content.ActivityFlags.NoHistory);
   string uriAndroid = "http://x/docs/document1";
   activity.PutExtra("url", JsonConvert.SerializeObject(uriAndroid));
   StartActivity(activity);
}catch (Exception){
...
}

主要问题是,我无法修改api,所以端点是http://x/docs/document1,但是如果我尝试另一个uri,扩展名为.pdf,例如https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf,它就可以正常工作。

我不知道我是否需要以其他方式从API获取该信息,如何在不先下载文档的情况下在webView或外部应用程序中显示pdf?

android xamarin.android
1个回答
0
投票

首先下载解决方案,然后从本地打开。

        void PrintPdf(Uri uri)
        {

            var webClient = new WebClient();

            webClient.Proxy = WebRequest.DefaultWebProxy;
            webClient.Credentials = new NetworkCredential("UserName", "Pass");
            webClient.Encoding = Encoding.UTF8;

            var bytes = webClient.DownloadData(uri);

            var text = bytes; // get the downloaded text
            string localFilename = "NameforPdf.PDF";
            string localPath = System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString(), localFilename);
            File.WriteAllBytes(localPath, text); // writes to local storage
            bool exists = File.Exists(localPath);
            if (exists)
            {
                Java.IO.File file = new Java.IO.File(localPath);
                file.SetReadable(true);
                //That's the important part, notice the content://
                Android.Net.Uri uriLocal = Android.Net.Uri.Parse("content://" + localPath);
                Intent intent = new Intent(Intent.ActionView);
                intent.SetFlags(ActivityFlags.NewTask);
                intent.SetDataAndType(uriLocal, "application/pdf");
                intent.AddFlags(ActivityFlags.GrantReadUriPermission);

                try
                {
                    StartActivity(intent);
                }
                catch (Exception)
                {
                    Toast.MakeText(Xamarin.Forms.Forms.Context, "pdf reader not installed", ToastLength.Short).Show();
                }
            }           
        }
© www.soinside.com 2019 - 2024. All rights reserved.