如何在 C# 上使用预览为 android 创建 PDF 查看器

Posted

技术标签:

【中文标题】如何在 C# 上使用预览为 android 创建 PDF 查看器【英文标题】:How to create PDF viewer for android on C# with preview 【发布时间】:2019-06-30 07:04:32 【问题描述】:

我想创建或查找在 android 上使用预览选项读取 PDF 文件的应用程序。所以它把所有页面的缩略图放在1上。

如何使用 C# 在 Xamarin 上执行此操作?

【问题讨论】:

这里有类似的讨论。(***.com/questions/41176549/…) 【参考方案1】:

请按照以下步骤操作。

第 1 步:您必须在 AndroidManifest.xml 中的 application 标签下添加提供程序

<application>
    <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="your package name.provider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
              android:name="android.support.FILE_PROVIDER_PATHS"
              android:resource="@xml/file_paths" />
          </provider>
     </application>

第 2 步:在 PDF 查看器中从 Assets 文件夹中打开文件

  private void OpenPdfInExternalApplication(string filename)
    
        AssetManager assetManager = Activity.Assets;
        string fileName1 = filename + ".pdf";
        var file = new File(Activity.FilesDir, fileName1);

        Uri uri = null;
        Intent intent = new Intent(Intent.ActionView);
        try
        
            // Get the input stream
            Stream input = assetManager.Open(fileName1);
            Stream output;
            if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
              
                output = Activity.OpenFileOutput(file.Name, FileCreationMode.Private);
                uri = FileProvider.GetUriForFile(Activity, Activity.PackageName + ".provider", file);
                 intent.SetDataAndType(uri, "application/pdf");
              
              else
              
                   output = Activity.OpenFileOutput(file.Name, FileCreationMode.WorldReadable);
                  intent.SetDataAndType(Uri.Parse("file://" + Activity.FilesDir + "/" + fileName),
                 "application/pdf");
              
            input.CopyTo(output);
            intent.AddFlags(ActivityFlags.GrantPrefixUriPermission);
            intent.AddFlags(ActivityFlags.GrantReadUriPermission);
        
        catch (Exception e)
        
            Console.WriteLine(e);
            throw;
        

        try
        
            StartActivity(intent);
        
        catch (ActivityNotFoundException ex)
        
            Toast.MakeText(Activity, ex.Message, ToastLength.Long).Show();
        
    

【讨论】:

非常感谢!我想要的是循环浏览所有页面并为它们获取缩略图并制作一个新的 PDF。这将如何?也许有现成的应用程序? 我认为是这样的:page=PDF.getPage; pic[1]=制作缩略图(页面); createPDF(arrayPages);

以上是关于如何在 C# 上使用预览为 android 创建 PDF 查看器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 上更改布局预览默认设备

如何从 C++ 为 Xamarin.Android 创建 C# DLL

在 C# 中打印和打印预览位图

如何在android中创建视频预览?

如何从 Android 上的 URL 页面获取预览拇指?

如何使用 Android API 将相机预览大小设置为全屏?