Xamarin Android 使用 Mupdf 在布局中查看 pdf

Xamarin Android view pdf in layout using Mupdf

我想为我的 Xamarin Android 项目使用 MuPDF reader。 我正在尝试以相对布局查看 PDF

这是我的相对布局代码

  <RelativeLayout
   android:id="@+id/mupdf_wrapper"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
  </RelativeLayout>

这是主要活动

SetContentView(Resource.Layout.Main);

        RelativeLayout mupdfWrapper = FindViewById<RelativeLayout>(Resource.Id.mupdf_wrapper);



        MuPDFCore core = new MuPDFCore(this, "test.pdf");
        MuPDFReaderView reader = new MuPDFReaderView(this);
        reader.Adapter = new MuPDFPageAdapter(this, new FilePicker.IFilePickerSupport() , core);
        mupdfWrapper.AddView(reader);

        mupdfWrapper.AddView(reader);

但是我在这里遇到错误

"cannot create an istance of the abstract class or interface 'File picker .iflepickersupport"

谁能帮我解决这个问题。

提前致谢。

如果您没有使用 FilePicker.IFilePickerSupport() 则将其设置为空 喜欢

reader.Adapter = new MuPDFPageAdapter(this, null , core);

第二件事是你的代码对我很有帮助,你遇到了问题,但你的问题是我在我的项目中的解决方案,所以谢谢你。 并尝试它会起作用,我在我的代码中使用它,它对我有用。 最后这件事是对不起我的英语。

     protected override void OnCreate(Bundle savedInstanceState)
     {
                base.OnCreate(savedInstanceState);
                File fileToDisplay = (File)fileFromAsset(this, "test.pdf");
                fileToDisplay.SetWritable(true);
                RelativeLayout mupdfWrapper = FindViewById<RelativeLayout>(Resource.Id.mupdf_wrapper);
                MuPDFCore core = new MuPDFCore(this, fileToDisplay.AbsolutePath);

                MuPDFReaderView reader = new MuPDFReaderView(this);
                MuPDFPageAdapter adapter = new MuPDFPageAdapter(this, null, core);
                reader.SetAdapter(adapter);
                mupdfWrapper.AddView(reader);
    }

    private object fileFromAsset(Context context, string assetName)
    {
        File outFile = new File(context.CacheDir, assetName);
        copy(context.Assets.Open(assetName), outFile);
        return outFile;
    }

    private void copy(Stream inputStream, File output)
    {
        OutputStream outputStream = null;
        var bufferedInputStream = new BufferedInputStream(inputStream);
        try
        {
            outputStream = new FileOutputStream(output);
            int read = 0;
            byte[] bytes = new byte[1024];
            while ((read = bufferedInputStream.Read(bytes)) != -1)
            {
                outputStream.Write(bytes, 0, read);
            }
        }
        finally
        {
            try
            {
                if (inputStream != null)
                {
                    inputStream.Close();                  
                    inputStream.Dispose();
                    inputStream = null;
                }
            }
            finally
            {
                if (outputStream != null)
                {
                    outputStream.Close();                        
                    outputStream.Dispose();
                    outputStream = null;
                }
            }
        }
    }