2012-02-08 2 views
2

Я пытаюсь создать файл ePub в android. Ниже мой исходный код.Невозможно создать ePub

Но я получаю NullPointerException в

epubWriter.write(book, out);

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

насчет *.css, mimetype, META-INF/container.xml, OEBPS/*.opf, *.otf файлы?

Обязательны ли они для создания файла ePub?

Я могу создать файл, но это не в нужном формате, я думаю, как когда я тяну этот файл с устройства и попытаться его просмотра в Калибр, он не открывается, давая следующее сообщение об ошибке

calibre, version 0.8.38 ERROR: Could not open ebook: File is not a zip file

Я абсолютный новичок в разработке 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(); 
     } 
    } 
} 

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) 
at nl.siegmann.epublib.epub.EpubWriter.write(EpubWriter.java:53) 
at com.createepub.CreateEPub.onCreate(CreateEPub.java:91) 
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) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
at dalvik.system.NativeStart.main(Native Method) 

Обратите внимание, что CreateEPub Line 91 относится к epubWriter.write(book, out);

+0

Возможный дубликат [Создать файл EPub в android] (http://stackoverflow.com/questions/9174375/create-epub-file-in-android) –

+0

Да. Извините: (... – GAMA

ответ

3

Я надеюсь, что вы используете siegmann LIB для создания EPUB ,

Нужно включить 2 Lib файлы (обязательные)

  1. epublib-ядро-latest.jar
  2. SLF4J-андроид-1.6.1-RC1.jar

Скачать как баночка из http://www.siegmann.nl/epublib/android

Пример кода

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import nl.siegmann.epublib.domain.Author; 
import nl.siegmann.epublib.domain.Book; 
import nl.siegmann.epublib.epub.EpubWriter; 
import android.app.Activity; 
import android.os.Bundle; 



public class EpubAppActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Book b = new Book(); 
     b.getMetadata().addTitle("test epub book"); 
     b.getMetadata().addAuthor(new Author("author name")); 

     EpubWriter w = new EpubWriter(); 

     FileOutputStream fos; 
     try { 

      File file = new File(getApplicationContext().getExternalFilesDir(null), "test.epub"); 
      if(!file.exists()){ 
       file.createNewFile(); 
      } 
      fos = new FileOutputStream(file); 
      w.write(b, fos); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 
} 
+0

Thnx for ur reply. Когда я попробовал ваш предложенный код, он дает мне «калибр», версия 0.8.38 ОШИБКА: Не удалось открыть ebook: никаких действительных записей в позвоночнике этого EPUB' ... Что может быть проблемой? – GAMA

+0

Как вы открываете книгу epub? Вы используете какой-либо инструмент? – Prasad

+0

да. Я использую 'Calibre'. Я загрузил файл ePub и открыл его в' Calibre', он работает. попробуйте открыть файл, созданный этим кодом, он не работает. – GAMA

Смежные вопросы