Xamarin Android просмотр PDF в макете с использованием Mupdf

Я хочу использовать программу чтения MuPDF для своего проекта Xamarin Android. Я пытаюсь просмотреть 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);

Но я получаю ошибку здесь

«не удается создать экземпляр абстрактного класса или интерфейса «Средство выбора файлов .iflepickersupport»

Может ли кто-нибудь помочь мне решить эту проблему, пожалуйста.

Заранее спасибо.


person Mohamed Mohamud Zardheye    schedule 26.11.2016    source источник
comment
Какую ошибку вы получаете?   -  person JosephH    schedule 27.11.2016
comment
спасибо, ошибка в этой строке reader.Adapter = new MuPDFPageAdapter(this, new FilePicker.IFilePickerSupport(), core); он говорит, что не может создать экземпляр абстрактного класса или интерфейса «Сборщик файлов .iflepickersupport»   -  person Mohamed Mohamud Zardheye    schedule 28.11.2016


Ответы (1)


Если вы не используете FilePicker.IFilePickerSupport(), установите для него значение null, например

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;
                }
            }
        }
    }
person PixelDev    schedule 09.12.2016
comment
Спасибо, Вишал, когда я развертываю, он говорит, что не может открыть файл test.pdf, так что может у вас есть другой способ, этот код у меня не работает - person Mohamed Mohamud Zardheye; 10.12.2016
comment
так что вы открываете этот файл из ресурсов, а затем используете код. я редактирую свой ответ. - person PixelDev; 12.12.2016
comment
спасибо, Вишал, действительно, вы так много помогли, но все же я получаю сообщение об ошибке, в котором говорится, что MuPDFReaderView не содержит определения для SetAdapter, и не может быть найден метод расширения SetAdapter, принимающий первый аргумент типа MuPDFReaderView (вы пропали? директива using или ссылка на сборку?) - person Mohamed Mohamud Zardheye; 12.12.2016
comment
о, извини, брат, извини, я забыл упомянуть об использовании версии com.Artifex.MuPdf, просто добавь новую последнюю версию из диспетчера пакетов nuget, и она разрешится. а затем он использует как Artifex.MuPdf; - person PixelDev; 12.12.2016
comment
когда я пытаюсь установить последнюю версию, он говорит, что ссылка на объект не установлена ​​​​на экземпляр объекта, поэтому я не могу установить последнюю версию, но версия 1 работает для меня, помогите, пожалуйста - person Mohamed Mohamud Zardheye; 12.12.2016
comment
` Читатель MuPDFReaderView = новый MuPDFReaderView(this); reader.Adapter = новый MuPDFPageAdapter(this, null, core); mupdfWrapper.AddView(читатель); ` - person PixelDev; 13.12.2016
comment
vishal Тем не менее я получаю эту ошибку. Ссылка на объект не установлена ​​​​на экземпляр объекта. даже когда я использую свой старый код - person Mohamed Mohamud Zardheye; 14.12.2016
comment
не могли бы вы указать, где вы получили эту ошибку ссылки на объект ?? - person PixelDev; 15.12.2016
comment
Когда я развертываю всплывающее окно, появляется ошибка, когда я создаю ее только тогда, когда. Я развертываю, не могли бы вы прислать свой проект, я много пробовал, но ничего не работает На самом деле мне нужно только добавить пользовательскую панель инструментов, мой адрес электронной почты: [email protected] - person Mohamed Mohamud Zardheye; 15.12.2016
comment
Я все еще жду тебя, брат, вишал - person Mohamed Mohamud Zardheye; 18.12.2016
comment
Извини, брат, из-за большой загруженности работой я не могу отправить тебе письмо, пожалуйста, я отправлю тебе письмо. - person PixelDev; 19.12.2016
comment
добро пожаловать. и если да, то отметь как правильный ответ :) - person PixelDev; 22.12.2016