2011-05-17 21 views
19

que estoy tratando de hacer un lector epubla "FBReader" hacer la paginación de archivos html en epub

quiero hacer la paginación como FBReader hace

Ahora tengo el código fuente de FBReader, pero no se donde poner en práctica la paginación

tengo mi aplicación en otras características

Todo lo que necesito de FBReader es la paginación

¿Hay alguien que haya hecho algo similar?

Gracias por su tiempo para leer esta pregunta.

ps: la paginación es escindir el archivo html en páginas, dependiendo del tamaño de la pantalla y el tamaño de la fuente, y el idioma también está en consideración, cuando se cambió el tamaño de la fuente, el número de página también cambió. Y el contenido del archivo epub es formato html

+2

¿Dónde está el código fuente de fbreader? Si publica un enlace a su fuente, tal vez podamos encontrar la parte de paginación. –

+0

creo que el código fuente de la versión de Android debería ser desde aquí. http://www.fbreader.org/FBReaderJ/ – melaos

+2

Véase también http://stackoverflow.com/questions/2808652/how-to-implement-page-break-in-epub-reader –

Respuesta

4

Es un código fascinante. Me encantaría ver una traducción del proyecto original del estudiante (pero supongo que el documento original está en ruso). Como este es un puerto de un proyecto de C++, tiene un estilo interesante de codificación en algunos lugares.

La aplicación realiza un seguimiento de dónde se encuentra en el libro mediante el uso de cursores de párrafo (ZLTextParagraphCursor). Esta situación es comparativa con los cursores de la base de datos y la paginación de registros. La clase que se encarga de servir la página actual y calcular el número de páginas es ZLTextView.

Como ePubs son documentos reflowable y no orientado a la página en realidad no hay una definición concreta de una página - que sólo depende de en qué parte del documento que sucede que se busca (párrafo, palabra, carácter) y con qué configuración de visualización.

+0

En el número total de páginas contadas crea Emite cuando hay imágenes. ¿Puedes darme la solución para esto? – Manisha

3

Como dice McLaren, FBReader no no implementar la paginación: Utiliza el ZLibrary, que está disponible desde el mismo website como FBReader.

El código original utiliza esto para calcular el número de página actual:

size_t ZLTextView::pageNumber() const { 
    if (textArea().isEmpty()) { 
     return 0; 
    } 
    std::vector<size_t>::const_iterator i = nextBreakIterator(); 
    const size_t startIndex = (i != myTextBreaks.begin()) ? *(i - 1) : 0; 
    const size_t endIndex = (i != myTextBreaks.end()) ? *i : 
      textArea().model()->paragraphsNumber(); 
    return (myTextSize[endIndex] - myTextSize[startIndex])/2048 + 1; 
} 

La versión de Java utiliza esta función para calcular el número de página:

private synchronized int computeTextPageNumber(int textSize) { 
    if (myModel == null || myModel.getParagraphsNumber() == 0) { 
     return 1; 
    } 

    final float factor = 1.0f/computeCharsPerPage(); 
    final float pages = textSize * factor; 
    return Math.max((int)(pages + 1.0f - 0.5f * factor), 1); 
} 

Esta se encuentra en org.geometerplus.zlibrary.text.view.TextView

Sin embargo, es tan simplista que podría implementar la suya.

+0

Sí, pero ¿hay algún código para contar el número total de páginas, incluidas las imágenes? – Manisha

2

Como lo entendí es que usa 3 mapas de bits anterior y siguiente. Lo que han hecho es escribir un texto que se almacena y lee sobre estos 3 mapas de bits. Más de lo que ves en la parte superior, calculan los datos de los párrafos de cuánto tiempo dura el desplazamiento que ves en el ejemplo de los demás. Puede iniciar ingeniería inversa en la clase de paquete android.view bitmapManager. Esto debería explicar todo sobre cómo hacen su paginación.

Cuestiones relacionadas