20131217: New Release with Support for KitKat 4.4

Thanks to our Indian user who sent us the issue of our SDK failure after updating to KitKat 4.4, the latest Android version.
The new release resolves the specific problems proposed by him. We appreciate any suggestions and issues from our clients, who may encounter other issues due to different devices and/or diffenrent platforms.

Screen Shot 1

AnFengDe EPUB UI Component 20131021 is Released

After the last release in June, we kept receiving suggestions from developers, for which we felt the need to publish a new version. In this one the following features are enforced:

1, Support for MIPS, X86, ARMEBI, ARMEBI-V7A chip architectures;
2, Support for Android 4.3;
3, Updated and tested for iOS7 environment.

We’ve been developing UI for the new release. Indeed it has taken us quite a long time. But we think it’s worthy. Due to time and energy limitations, there’s been no optimization for the iOS7 interface. Most of the job with significance has been at the EPUB parsing layer.

A Success Case Using our EPUB SDK

We had yesterday an encouraging feedback from one of our SDK users who has been developing an app for Brazil’s Ministry of Education. The ministry equips public school teachers with tablets that are preinstalled of the app to introduce new technologies to these teachers. The app contains eight books. From the screenshots forwarded to us by Mr.Joao Filipe Dalla Rosa(joaofilipedallarosa@gmail.com), thanks be to him, we can see that the rendering of illustrations is quite nice, though we are Portuguese illiterate.

Screen shot 3

Screen shot of Bookshelf

Screen Shot 1

Screen Shot 1

Screen Shots

Screen Shot 2

Screen Shot s

Screen Shot 8

Screen Shot s

Screen Shot 8

AnFengDe EPUB UI Component 20130521 is released

In this release we’ve modified our project because some people want to load the inbuilt books and don’t want users to delete them. We deleted the add book function and delete book function. So if you want to add books to you project, you can put them in the books folder(in android is the assets/books), and the app will load them when it starts.

Introducing EPUB CFI

CFI, or Canonical Fragment Identifier, is a device designed by IDPF to refer any location of an element or context in an EPUB publication. CFI has a structure similar to that of an HTTP address and has been the result of inspiration by the power of the Web’s hyperlinks.
We at Anfengde was applying the % percentage to indicate reading progress when developing our AnReader. Though we had spent a lot of time on the EPUB3 Specifications, even making a rather formal translation to contribute to IDPF, we ignored the chapters about CFI. Then Ric Wright’s mentioning of it caught our attention when he pulled our code and ran our SDK. Ric Wright is serving part time as technical director of the Readium SDK project and is the president of Geo F/X. So we researched this part again and discussed within our team about the rules IDPF has made. It’s yet a tentative measure as we understand it since IDPF only labels it as recommended.
Below is a brief introduction, for full documentation please check at IDPF’s site.

The characters employed by IDPF to construct identifiers are “/”, ”[“, “~”, “!”, “@” and “^”, among which “^” escapes characters to avoid confliction. Identifiers are a sequence of steps placed in brackets and prefixed with “epubcfi”. They are then appended to the end of IRI with #, e.g.,

In the above example, even numbers like 6 and 4 after “/” indicate that the step is an element of a DOM object. Odd numbers after “/” are texts to be rendered. Contents inside square brackets ([…]) are assertions for verification. Each special character is defined with specific usages in the link about, so we only cite an example from there to demonstrate the clues.
Given the following Package Document:

<?xml version="1.0"?>

<package version="2.0" 

        <dc:identifier id="bookid">...</dc:identifier>
        <item id="toc"
        <item id="titlepage" 
        <item id="chapter01" 
        <item id="chapter02" 
        <item id="chapter03" 
        <item id="chapter04" 
        <itemref id="titleref"  idref="titlepage"/>
        <itemref id="chap01ref" idref="chapter01"/>
        <itemref id="chap02ref" idref="chapter02"/>
        <itemref id="chap03ref" idref="chapter03"/>
        <itemref id="chap04ref" idref="chapter04"/>

and the XHTML Content Document chapter01.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml">
    <body id="body01">
        <p id="para05">xxx<em>yyy</em>0123456789</p>
        <img id="svgimg" src="foo.svg" alt="..."/>

Then epubcfi(/6) is the step of “spine”, the 3rd element in the package, epubcfi(/6/4) the 2nd spine element which is chap01ref, for which [chap01ref] is asserted for checking. Thus the EPUB CFI of epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:2) refers to the location of “1” in the text string 0123456789.

Goals of Upcoming Work

We are very grateful to the developers around the world for their recommendations and functional requirements. We ourselves also found that there are inadequacies in our work. We’ve focused on the development of functional features, neglecting the documentation part.

Two important things to do:
1, To provide a commercial AnReader program, fully open source, on which our customers can make changes to achieve their own reading software. This application will be available in Apple’s AppStore and Google Play.
2, To perfect documentation by adding implementation documents to facilitate the developers with references so as to make up for the inconvenience in concealing the core code.
After the completion of this stage, we will consider the DRM aspects of the work. As a matter of fact, the publishing industry can not just stare at contents such as novels and magazines. There are a lot of data with economic value, e.g., stock market analysis, training materials. It is entirely reasonable that respective customers set confidentiality requirement for fresh contents. As for tools for compiling EPUB books, we do not intend to develop an editor now. Rather, we will make use of existing open source tools, or provide this functionality by writing plug-ins for Office software.

Thank you, programmers, very much for your support. Please contact us when you have any questions.

AnFengDe EPUB SDK vs Adobe RMSDK

Public Google Document is here!



EPUB SDK is a development kit written in ANSI C and Java, realizing EPUB 3.0 parsing and achieving excellent performance on mobile devices.
This development kit provides native development interfaces for both Android and iOS. It contains a framework for the iOS platform, a jar file and a shared library for the Android platform.
All you need to do is simple copying and importing, then you can directly reference in your own project.



Test books:

Creative Commons – A shared culture.epub, Around the world in 28 languages.epub. For more epub 3.0 test books you can click this link,

Supported functions

Both our android app and ios app shared the same UI and features.

  • Changing text size        We provided multiple, more than RMSDK’s, text sizes for you to choose from.  To zoom in or out, just tap the button pair on the top menu bar marked as “A”.
  • Flipping pages        Swipe left and right on the screen. Our SDK also supports previous/next chapter jumping by tapping buttons at the bottom setting bar.
  • Bookmark            It’s easy to add a bookmark anywhere you please in the book.
  • Table of contents        Table of contents for epub 3.0 and epub 2.0 books will display correctly. That’s what neither RMSDK nor Stanza can do.
  • Skipping pages        It’s easy to jump to anywhere of the book by moving the slider on the sliding bar.
  • Page percentage        Our SDK chooses to use percentage in marking the reading progress.
  • Playing audio and video    Our SDK supports the playing of audio and video files embedded in the book.
  • TTS(Text To Speech)    our SDK support speaking the selected content of the book.
  • Friendly reading interface    For several books (such as this book), if you open them using RMSDK, you can find that the reading interface is unfriendly. For the same book, our SDK performs excellent rendering.
  • Changing the style of UI    If you are not satisfied with the original UI style, our SDK provides several interfaces for customizing and replacement.
  • Supporting both EPUB 2.0 and EPUB 3.0 specification    Our SDK exhibits excellent performance in rendering EPUB 2.0 and EPUB 3.0 books.
  • Free of charge    AnReader SDK with advertisement bar is free of charge. To the best of our knowledge, the price for licensing RMSDK on ios is $30,000.

More functions    Our team is working on AnFengDe EPUB SDK for adding more features.




The Adobe Reader Mobile SDK (RMSDK) is Adobe’s toolkit for rendering EPUB and PDF content for eReading apps and devices.



Test books:

Creative Commons – A shared culture.epub, Around the world in 28 languages.epub.

Supported functions

  • Changing text size        The app provided five text sizes.
  • Flipping pages        Swipe the finger left and right on the screen.
  • Changing orientation    You can choose the reading orientation. Our AnFengDe team thought that this function was useless and had abandoned it.
  • Searching            RMSDK supports searching. The function will be available in the future release.
  • Hightlight            RMSDK supports highlighting. The function is in our plan and will be available in the future release.
  • Bookmark This is a basic function of the reader software.
  • Skipping pages This is a basic function of the reader software.

Function Table List

AnFengDe EPUB SDK vs Adobe RMSDK