Создать EPub файл в Android - PullRequest
       7

Создать EPub файл в Android

0 голосов
/ 07 февраля 2012

Я пытаюсь создать файл ePub в Android.

Ниже мой исходный код.

Но я получаю fileNotFoundException на

epubWriter.write(book, new FileOutputStream("test1_book1.epub"));

Я поместил cover.png и test1.html в папку активов.

Соответствующий css файл является обязательным для создания файла ePub?

Я абсолютный новичок в разработке ePub, поэтому любая помощь / предложение будут оценены.

CreateEPub.java

public class CreateEPub extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        AssetManager assetManager = getAssets();

        try {
            Book book = new Book();
            book.getMetadata().addTitle("Epub test book 1");
            book.getMetadata().addAuthor(new Author("Joe", "Tester"));
            InputStream is = assetManager.open("cover.png");
            book.getMetadata().setCoverImage(new Resource(is, "cover.png"));
            // Add Chapter 1
            InputStream is1 = assetManager.open("test1.html");
            book.addSection("Introduction", new Resource(is1, "chapter1.html"));

            EpubWriter epubWriter = new EpubWriter();
            epubWriter.write(book, new FileOutputStream("test1_book1.epub"));
            Log.v("ePub", "Created");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

EDIT

Из различных предложений, теперь я могу создать файл, но он не в надлежащем формате, я думаю, что, когда я вытаскиваю этот файл с устройства и пытаюсь просмотреть его, он не открывается, выдавая ошибку, Это не zip-файл .

LogCat

java.lang.NullPointerException
at org.kxml2.io.KXmlSerializer.attribute(KXmlSerializer.java:473)
at nl.siegmann.epublib.epub.PackageDocumentMetadataWriter.writeMetaData(PackageDocumentMetadataWriter.java:93)
at nl.siegmann.epublib.epub.PackageDocumentWriter.write(PackageDocumentWriter.java:45)
at nl.siegmann.epublib.epub.EpubWriter.writePackageDocument(EpubWriter.java:112)
0at nl.siegmann.epublib.epub.EpubWriter.write(EpubWriter.java:53)
at com.createepub.CreateEPub.onCreate(CreateEPub.java:93)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
0at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

ПРИМЕЧАНИЕ: CreateEPub.java:93 относится к epubWriter.write(book, out);

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Проблема еще не в epubwriter, а в FileOutputStream. Необходимый параметр String - это не имя файла, а путь к файлу. проверьте документацию здесь. http://developer.android.com/reference/java/io/FileOutputStream.html

Я бы рекомендовал использовать версию параметра FileOutputStream. получить файл из вашего контекста с помощью getFilesDir () и добавить ваш файл в этот каталог и т. д. Будьте внимательны с разрешениями. Вашему приложению нужны надлежащие разрешения, если вы записываете свой файл на внешнее хранилище.

edit: я не могу комментировать, я надеюсь, что вы прочитали это. createepub - это действие, а каждое действие - это контекст. деятельность «расширяет» контекст. http://developer.android.com/reference/android/app/Activity.html

1 голос
/ 07 февраля 2012

Вы можете записывать файлы только во Внутреннее хранилище (память устройства) или Внешнее хранилище (SD-карта), см. хранилище данных . Простое открытие FileOutputStream с произвольным именем файла не будет работать, поскольку эта файловая система доступна только для чтения.

...