mupdf: как открыть файл PDF с помощью метода openBuffer?

К сожалению, я не нашел никакой документации по этому вопросу, так что, возможно, я что-то не так делаю.

Я использую образец mupdf для Android и немного изменил исходный код MuPDFActivity следующим образом:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mAlertBuilder = new AlertDialog.Builder(this);

        if (core == null) {
            core = (MuPDFCore)getLastNonConfigurationInstance();

            if (savedInstanceState != null && savedInstanceState.containsKey("FileName")) {
                mFileName = savedInstanceState.getString("FileName");
            }
        }
        if (core == null) {
            Intent intent = getIntent();
            byte buffer[] = null;
            if (Intent.ACTION_VIEW.equals(intent.getAction())) {
                Uri uri = intent.getData();
                try {
                    InputStream inputStream = new FileInputStream(new File(uri.toString()));
                    int len = inputStream.available();
                    buffer = new byte[len];
                    inputStream.read(buffer, 0, len);
                    inputStream.close();
                } catch (Exception e) {
                    Log.e(TAG, e.getMessage());
                }
                if (buffer != null) {
                    core = openBuffer(buffer);
                } else {
                    core = openFile(Uri.decode(uri.getEncodedPath()));
                }
                SearchTaskResult.set(null);
            }

Метод openBuffer() активности не изменился:

private MuPDFCore openBuffer(byte buffer[]) {
        System.out.println("Trying to open byte buffer");
        try {
            core = new MuPDFCore(this, buffer);
            // New file: drop the old outline data
            OutlineActivityData.set(null);
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return core;
}

После того, как я пытаюсь открыть любой PDF-файл, приложение показывает предупреждение с сообщением «Не удается открыть документ». Это логи:

03-21 10:43:14.754    3601-3601/com.artifex.mupdfdemo.debug E/libmupdf﹕ Opening document...
03-21 10:43:14.754    3601-3601/com.artifex.mupdfdemo.debug E/libmupdf﹕ error: No document handlers registered
03-21 10:43:14.754    3601-3601/com.artifex.mupdfdemo.debug E/libmupdf﹕ error: Cannot open memory document
03-21 10:43:14.754    3601-3601/com.artifex.mupdfdemo.debug E/libmupdf﹕ Failed: Cannot open memory document

Итак, есть ли способ открыть файл pdf в виде массива байтов и что это за способ?


person aniGem    schedule 21.03.2014    source источник


Ответы (1)


Я предполагаю, что вы используете версию файла android jni mupdf.c, которая старше, чем версия файлов основной библиотеки. Произошло изменение в API библиотеки, которое требует вызова fz_register_document_handlers(ctx) между созданием контекста и вызовом fz_open_document. Первое сообщение об ошибке, которое вы видите, предполагает, что fz_register_document_handlers не вызывается

person Paul Gardiner    schedule 21.03.2014
comment
Спасибо за Ваш ответ. Проблема действительно в том, что метод fz_register_document_handlers(ctx) не вызывается. Но причина не в старых файлах, причина в том, что этот вызов был добавлен только в метод openFile() mupdf.c, а не в openBuffer() :) - person aniGem; 24.03.2014
comment
Исправлено несколько дней назад, обновите исходники с git://git.ghostscript.com/mupdf.git. - person iBog; 25.06.2014
comment
@aniGem, можете ли вы опубликовать свой код? Я пытаюсь использовать mupdf и получаю сообщение об ошибке java.lang.UnsatisfiedLinkError: dlopen failed: не удается найти символ atof, на который ссылается libmupdf_java.so... вы можете помочь? stackoverflow.com/questions/38343219/ - person AndroidNewBee; 13.07.2016