FANDOM


Primera iteraciónEditar

Compatibilidad IEEditar

Al parecer el problema con IE correspondiente al rendereo deforme de la pagina, esta relacionado con el canvas.height definido en flipping_book.js linea 43. Modificar el valor hace que cambie el aspecto de la pagina. Tambien influye definir en el CSS los valores de canvas height en jquery.boocklet.latest.css. Seguir explorando por esta linea.(G.Font).

VisualizadorEditar

Integrar Visualización de 1 pdf con SpringEditar

(El efecto flipping es de 2 iteración, pero encontramos una manera sencilla de incluirlo desde el principio)

Hasta el momento se ha trabajado uniendo

(i) pdf.js que permite renderiar un pdf

(ii) pdfbooklet que permite darle el aspecto de libro (bonito/efecto flip/etc) a un tag html e hijos.

El primer objetivo es tener un HTML y un JS, donde en el primero este la ruta al pdf y en el último estén las funciones para visualizar el pdf.

El HTML y JS está en pc2/escritorio/amibook/booklet/example/index

El problema que estamos resolviendo es cargar correctamente pdf.js

El siguiente paso (por ejemplo) es integrar con spring y pasar como parametro de request un pdf.

Estamos trabajando sobre esto: Matías, Gissele y Tomás.

---

Finalmente se logró realizar la integración con Spring del trabajo anterior, pasando como parámetro GET en la URL el nombre del .PDF a rescatar y generándose la visualización correspondiente.

Para ello se debió identificar algunos puntos importantes sobre el funcionamiento de Spring con el servidor SpringBoot. En particular, para poder importar archivos .js, .css, imágenes y los propios .PDFs que probamos, fue necesario incluir todos ellos en el directorio resources/static, situando los .js en un subdirectorio /js y análogamente para los .css.

Queda pendiente, sin embargo, investigar sobre la tecnología de vistas Thymeleaf que se ocupa para embeber en la vista los datos, parámetros y variables obtenidos desde el controlador de dicha vista. Si bien se logró obtener con Thymeleaf los datos necesarios, no quedó del todo claro su uso y funcionamiento, por lo que es sugerible averiguar lo básico antes de seguir trabajando con dicha tecnología. (se agregará como post-it)

Trabajaron en ello: Matías y Diego.

Merger/estrategias mergeEditar

Usando ClownPDF: en la primera aproximación, ClownPDF no aumenta el tamaño del PDF resultante al mergear dos documentos. Esto se hizo utilizando los ejemplos que trae ClownPDF, por lo que tendríamos que ver, con la batería de test que se generen, que no hayan casos extraños en los cuáles pueda surgir algún problema, o medir de mejor manera, el tiempo que se demora en realizar el merge. (PageManagementSample)

Finalmente pude realizar un programa java que emplea la librería ClownPDF y que mergea dos documentos PDF. Esta funciona bastante bien, comparada con PDFBox, ya que se demora muy poco y el peso del archivo resultante es practicamente la suma de los dos anteriores.

Creé dos archivos .java (MergeDocuments.java y Ejemplo.java). En el primero están todas las funcionalidades necesarias para realizar el merge, y el segundo es meramente un ejemplo para probarlo y ver como utilizarla. Lo que es importante es que hay que agregar la ruta de un .jar al CLASSPATH, que es donde se encuentra la librería ClownPDF, para que compile y funcione. Esta ruta es: carpeta\PDFClown\java\pdfclown.lib\build\package\pdfclown.jar

Ahora Ejemplo.java mergea infinitos archivos pdf.

Edité un poco MergeDocuments.java, por lo que ahora los archivos de salida se llaman outputX.pdf donde X es un entero que se lo doy a la funcion. Además siempre para serializar utilizo el mismo método, que es Incremental Update, aunque falta investigar las implicancias de esto. 

Ahora Ejemplo.java utiliza una función auxiliar (mergeList(List<String> list)), a la cuál se le entrega una lista de String con las rutas de los pdf a mergear, y mergea los documentos, generando un outputX.pdf.

Ahora implementé una función mergeList(String[] list) que se le puede pasar un arreglo de String y mergea, por lo que el main recibe los parametros al momento de llamar al programa.

Esto lo realice en el PC3 y están en una carpeta llamada Cosas de Camilo en el Desktop.

Conclusiones: El merge finalmente resulta más rápido tomando las siguientes opciones:

- Tomando como método de serialización el Incremental Update.

- Primero tomando el archivo grande, y ese mergearlo con el archivo más chico.

Ahora el merge puede mostrar el número de páginas por archivo mergeado, más su nombre, por lo que podría servir al momento de realizar la tabla de contenidos.

Convertir a PDFEditar

JODConverter: http://www.artofsolving.com/opensource/jodconverter

OpenOffice API: http://www.openoffice.org/api/

XDocReport: https://code.google.com/p/xdocreport/ ; ejemplo de conversión (online): http://xdocreport-converter.opensagres.cloudbees.net/

Varios: http://ihaztehcodez.michael-lloyd-lee.me.uk/2010/10/converting-microsoft-office-word-excel.html

Table Of Contents/Rescatar datos para generar TOCEditar

Tercera IteraciónEditar

Render de Paginas:Editar

Como renderear varios documentos simultaneamente genera conflictos y una mala visualizacion, estamos probando hacer merge en el lado del servidor.

Merge del lado del servidor (branch: merge-fisico):Editar

Segunda IteracionEditar

page-number-input:Editar

Se agrego funcionalidad para que muestre los numeros de pagina actuales dentro del input. (al cargar pagina + al cambiar de pagina) (GF. TC)

Zoom al Hacer doble click:Editar

Se agrego funcionalidad: doble click en pagina hace zoom in; doble click nuevamente zoom out.(FC)

Cargado lazy de paginas:Editar

Las paginas se van cargando a medida que se solicitan. Se cargan tres paginas antes y despues de la pagina solicitada. En una lista se guarda el numero de las paginas cargadas, para no cargarlas denuevo en caso de ser solicitadas nuevamente. (DG,FC,MB)

Bug: Hay un problema con el instante en que se cargan las páginas. Supongamos que fui a la página 500; se cargará correctamente el intervalo de 3 págs. hacia atrás y adelante. Sin embargo, si ahora me desplazo a la página 502, no se producirá cargado (pues se tomará la página al inicio del desplazamiento, 500, y se constatará que su intervalo ya está completamente cargado); luego, si intento moverme a la 504, alcanzaré a ver que las páginas siguientes aún no están cargadas en el momento en que comenzó la animación (se ven grises).

-> Parche: Se puede usar un intervalo de 5 páginas hacia atrás y adelante para invisibilizar el problema. No obstante, sigue siendo un comportamiento irregular que podría ser conveniente revisar más adelante, en caso de no tener otras tareas más importantes. -- DG

Conversión DOC->PDF:Editar

XDocReport: No he podido correr los samples de código, pues he tenido enredos con los classpaths, dependencias y packages. Si alguien cacha cómo hacerlo funcionar, sería bienvenido. (DG)

UNOConv+OpenOffice: Se probó en línea de comandos de PC2 ejecutándolo como ["\Program Files(x86)\OpenOffice 4\program\python.exe" unoconv -f pdf archivodeprueba.docx] desde el directorio de unoconv (en Diego\unoconv-master). La conversión es particularmente lenta, el archivo PDF generado en la prueba realizada tiene un tamaño superior a 3 veces el del .docx original, y la tabla de contenidos del documento original se copia incorrectamente, con lo cual los números de capítulos y subtítulos en el PDF generado también son incorrectos. Sin embargo, tanto texto como imágenes se copian correctamente, y en general el documento resultante es 'parecido'.

Es recomendable evaluar qué tan problemático sea el asunto de la tabla de contenidos (pues a priori me parece improbable que los documentos a procesar vengan con tablas de contenido en Word) y ver si existe alguna forma de resolverlo, así como probar opciones de UNOConv para que el PDF resultante tenga menor tamaño y se genere más rápidamente. (DG)

Abiword (Linux CLI): Prontamente...


Tabla de contenidos:Editar

Logramos ponerle bookmarks a los pdf generados con merge. Falta colocarlo en el lugar que corresponde (agrega dos tablas en vez de una)

Camilo/cosasdecamilo/mergedocuments/pdfclown/  o abrir idea (GF,CG).

Ahora los bookmarks se agregan en la funcion mergeDocuments. Los bookmarks se agregan a medida que se van agregando los nuevos archivos al merge. Cada titulo en la tabla de contenidos corresponde al nombre del nuevo archivo que se está mergeando. Si la tabla de contenidos está vacía (primer merge) agrega además el titulo del primer archivo. Se revisó que coinciden los nombres de los titulos con la parte del documento a la que apuntan. (GF)

DUDA: si ya viene un documento con bookmarks, éstos se pierden al momento de mergearlo con otros. ¿Esta bien ese comportamiento? 

RESPUESTA: me parece logico que SI la incluya. Intenté agregarla pero no era tan trivial, así que queda pendiente de implementar en el caso que se opte por merge real.

Conectarse a base de datos desde spring:Editar

Buscando info en spring jdbc .


Visualizacion de causas para entrega iteracion 2 (merge):Editar

Causas que se pueden mostrar: 

P-47-2013, P-50-2013, P-52-2013, P-56-2013, P-64-2013.

Algunos archivos se ven ma&&#!L

Hipotesis que hemos probado y DESCARTADO:

1) Son archivos Word -> No! revisamos la BD y son pdf

2) Son así, no los discrimine -> No! se abren bien desde la BD y desde pjud.

3) Solo el primero se ve mal, es un problema del orden de los archivos -> No! cambiamos el orden y es el mismo el que se ve mal.

4) Content type está mal definido -> Revisamos con otros tipos y no cambia nada

Revisando hoy denuevo el asunto, tratamos de descartar algunas opciones:

Nueva Hipotesis: El problema está del lado del Browser. Fundamento: Cuando abre flipping-book y carga los documentos, podemos acceder a ellos directamente por el link que aparece en consola, y los doscumentos se ven bien. Asi que al parecer no esta relacionado con la forma en que el servidor manda los datos, sino con como los estamos mostrando.

!!!!! ENCONTRADO EL ORIGEN DEL PROBLEMA!!!!

Cuando flipping-book hace renderPageRange, le cambiamos el delta a 0. Y las paginas SE RENDEREAN BIEN! Asi que es un problema de cuando se intenta renderear varias paginas a la vez.

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.

También en FANDOM

Wiki al azar