Android : 正在解析 .epub 文件
Android : Parsing .epub file
我正在 android 中为我的客户创建一本 epub 图书 reader 应用程序。
我目前在我的应用程序中使用 FolioReader,但它不显示图像。在 android.
中是否有任何其他替代方法来显示 .epub 文件
提前致谢!
在 webview 中加载数据时,您必须提取图像并保留对这些图像的引用。试试这个代码(添加 epub lib 和 slf4j 库)
outPutFolder=getDir("example", Context.MODE_PRIVATE) + "/"+fileName +"/" ;
//your directory name
try {
epubInputStream=new FileInputStream(filePath);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
book = (new EpubReader()).readEpub(epubInputStream);
} catch (IOException e) {
e.printStackTrace();
}
outPutFolder=getDir("example", Context.MODE_PRIVATE) + "/"+fileName +"/" ;
setOutPutFolder(outPutFolder);
DownloadResource(outPutFolder);
linezNew = "";
Spine spine = book.getSpine();
List<SpineReference> spineList = spine.getSpineReferences() ;
int count = spineList.size();
StringBuilder string = new StringBuilder();
for (int i = 0; count > i; i++) {
Resource res = spine.getResource(i);
try {
InputStream is = res.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
try {
String line;
while ((line = reader.readLine()) != null) {
linezNew = string.append(line + "\n").toString();
}
} catch (IOException e) {e.printStackTrace();}
} catch (IOException e) {
e.printStackTrace();
}
}
linezNew = linezNew.replace("../", "");
finalDataToLoad="<head><style>img{max-width: 100%; width:50%; height: 50%;}</style></head> "+linezNew;
webView.loadDataWithBaseURL("file://" + outPutFolder, finalDataToLoad, "text/html", "utf-8", null);
DownloadResource 函数是
private void DownloadResource(String directory) {
try {
Resources rst = book.getResources();
Collection<Resource> clrst = rst.getAll();
Iterator<Resource> itr = clrst.iterator();
while (itr.hasNext()) {
Resource rs = itr.next();
if ((rs.getMediaType() == MediatypeService.JPG)
|| (rs.getMediaType() == MediatypeService.PNG)
|| (rs.getMediaType() == MediatypeService.GIF)) {
Log.d("Href", rs.getHref());
File oppath1 = new File(directory, rs.getHref().replace("OEBPS/", ""));
oppath1.getParentFile().mkdirs();
oppath1.createNewFile();
System.out.println("Path : "+oppath1.getParentFile().getAbsolutePath());
FileOutputStream fos1 = new FileOutputStream(oppath1);
fos1.write(rs.getData());
fos1.close();
} else if (rs.getMediaType() == MediatypeService.CSS) {
File oppath = new File(directory, rs.getHref());
oppath.getParentFile().mkdirs();
oppath.createNewFile();
FileOutputStream fos = new FileOutputStream(oppath);
fos.write(rs.getData());
fos.close();
}
}
} catch (Exception e) {
}
}
这里的 filePath 是你的 epub 文件的路径,fileName 是你的 epub 文件的名称,它是字符串
outPutFolder、linezNew、finalDataToLoad 也是字符串
我正在 android 中为我的客户创建一本 epub 图书 reader 应用程序。 我目前在我的应用程序中使用 FolioReader,但它不显示图像。在 android.
中是否有任何其他替代方法来显示 .epub 文件提前致谢!
在 webview 中加载数据时,您必须提取图像并保留对这些图像的引用。试试这个代码(添加 epub lib 和 slf4j 库)
outPutFolder=getDir("example", Context.MODE_PRIVATE) + "/"+fileName +"/" ;
//your directory name
try {
epubInputStream=new FileInputStream(filePath);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
book = (new EpubReader()).readEpub(epubInputStream);
} catch (IOException e) {
e.printStackTrace();
}
outPutFolder=getDir("example", Context.MODE_PRIVATE) + "/"+fileName +"/" ;
setOutPutFolder(outPutFolder);
DownloadResource(outPutFolder);
linezNew = "";
Spine spine = book.getSpine();
List<SpineReference> spineList = spine.getSpineReferences() ;
int count = spineList.size();
StringBuilder string = new StringBuilder();
for (int i = 0; count > i; i++) {
Resource res = spine.getResource(i);
try {
InputStream is = res.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
try {
String line;
while ((line = reader.readLine()) != null) {
linezNew = string.append(line + "\n").toString();
}
} catch (IOException e) {e.printStackTrace();}
} catch (IOException e) {
e.printStackTrace();
}
}
linezNew = linezNew.replace("../", "");
finalDataToLoad="<head><style>img{max-width: 100%; width:50%; height: 50%;}</style></head> "+linezNew;
webView.loadDataWithBaseURL("file://" + outPutFolder, finalDataToLoad, "text/html", "utf-8", null);
DownloadResource 函数是
private void DownloadResource(String directory) {
try {
Resources rst = book.getResources();
Collection<Resource> clrst = rst.getAll();
Iterator<Resource> itr = clrst.iterator();
while (itr.hasNext()) {
Resource rs = itr.next();
if ((rs.getMediaType() == MediatypeService.JPG)
|| (rs.getMediaType() == MediatypeService.PNG)
|| (rs.getMediaType() == MediatypeService.GIF)) {
Log.d("Href", rs.getHref());
File oppath1 = new File(directory, rs.getHref().replace("OEBPS/", ""));
oppath1.getParentFile().mkdirs();
oppath1.createNewFile();
System.out.println("Path : "+oppath1.getParentFile().getAbsolutePath());
FileOutputStream fos1 = new FileOutputStream(oppath1);
fos1.write(rs.getData());
fos1.close();
} else if (rs.getMediaType() == MediatypeService.CSS) {
File oppath = new File(directory, rs.getHref());
oppath.getParentFile().mkdirs();
oppath.createNewFile();
FileOutputStream fos = new FileOutputStream(oppath);
fos.write(rs.getData());
fos.close();
}
}
} catch (Exception e) {
}
}
这里的 filePath 是你的 epub 文件的路径,fileName 是你的 epub 文件的名称,它是字符串
outPutFolder、linezNew、finalDataToLoad 也是字符串