android - mupdf:如何使用 openBuffer 方法打开 pdf 文件?

标签 android pdf mupdf

不幸的是,我还没有找到关于这一点的任何文档,所以也许我做错了什么。

我在 android 上使用 mupdf 示例,我以这种方式稍微修改了 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);
            }

Activity 的 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 文件作为字节数组打开,这种方法是什么?

最佳答案

我的猜测是您使用的 android jni 文件 mupdf.c 的版本比主库文件的版本旧。库 API 发生了变化,需要在创建上下文和调用 fz_open_document 之间调用 fz_register_document_handlers(ctx)。您看到的第一条错误消息表明未调用 fz_register_document_handlers

关于android - mupdf:如何使用 openBuffer 方法打开 pdf 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22558597/

相关文章:

javascript - Firebase 断开连接

php - TCPDF - 不显示 UTF-8、拉丁字符

ios - Cocoapod "error: could not build module ' UIKit'"

android - 在 Android 中验证手机号码

android - 而是找到了 '1.8'。 Android 需要编译器合规级别 5.0 或 6.0。请使用 Android 工具 > 修复项目属性

pdf - 如何打印漂亮的 Swagger/OpenAPI 规范

java - Apache FOP 验证异常 : Invalid property encountered on "fo:inline": font-variant-ligatures

mupdf - 是否可以使用 MuPDF 保存修改后的 PDF?

c++ - 在 Windows 8.1 上使用 MuPDF 创建 pdf 图像注释

java - AndroidJavaProxy 不是一个接口(interface)