不幸的是,我还没有找到关于这一点的任何文档,所以也许我做错了什么。
我在 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/