Conversor PDF a Audio

Por: Matias Melivilu

 

1.- Descripción del problema:

Debido al aumento de del uso de pantallas para la lectura, esto se torna agotador y dañino para la vista de las personas, por lo que se busca la forma de acceder al contenido del texto sin la necesidad de agotar la vista leyendo.

2.- Análisis del problema:

Como se explica en el punto anterior, el uso en tiempos prolongados de algún dispositivo de pantalla se torna agotador y dañino para la vista de los usuarios, que cada vez es más común el uso de estas con el fin de acceder a contenido de lectura en formato PDF, ya sea con fines de entretención o académicos.  Para ello, se plantea un sistema en JavaFX donde el usuario sea capaz de ingresar el texto que desea leer en formato PDF para así poder reproducir dicho texto en formato de audio, para así acceder a su contenido sin la necesidad de estar forzando la vista.

3.- Casos de uso:

Primer caso:

_Nombre: Texto deseado visualizado en consola.

_Propósito: El usuario selecciona un archivo PDF y lo visualiza en la consola.

_Actor: Usuario del programa.

_Precondiciones: El archivo de entrada debe ser en formato PDF.

_Evento: Usuario ingresa archivo PDF y lo visualiza en consola.

_Tipo: Manual.

_Curso normal de eventos:

Actor

Sistema

1.       El usuario ejecuta el programa.

2.       El programa despliega una ventana.

3.       El usuario ingresa en la opción de agregar un archivo PDF.

4.       El programa despliega una ventana parala selección de archivos.

5.       El usuario busca y selecciona el archivo PDF deseado.

6.       Se muestra en consola el texto deseado.

7.       Usuario puede leer y confirmar que es el texto deseado.

8.       Programa queda a la espera de si se quiere ingresar un nuevo texto o de si se reproducirá el seleccionado.

 

Segundo caso:

_Nombre: Escuchar un archivo PDF.

_Propósito: El usuario desea poder escuchar el contenido escrito en un archivo PDF.

_Actor: Usuario del programa.

_Precondición:  El archivo de entrada debe ser en formato PDF.

_Evento: Usuario ingresa un PDF y Escucha su contenido.

_Tipo: Manual.

_Curso normal de eventos:

 

Actores

Sistema

1. El usuario ejecuta el programa

 

2.El programa despliega una ventana

 

3. El usuario selecciona la opción para ingresar archivo PDF.

 

4. Se despliega ventana para la búsqueda del archivo deseado

 

5. El usuario busca e ingresa PDF deseado.

 

6. Se muestra en consola el texto a leer.

 

7. El usuario selecciona la opción de speak para reproducir el audio.

 

8. El programa empieza a reproducir el texto seleccionado hasta terminar.

 

9. El usuario escucha el audio del texto deseado.

 

10. El programa finaliza y queda a la espera de ingresar otro texto.

 

 

Tercer caso:

_Nombre: Usuario desea ingresar otro texto

_Propósito: El usuario desea escuchar otro archivo PDF ya habiendo cargado uno previo.

_Actor: Usuario del programa.

_Precondición: El archivo de entrada debe ser en formato PDF.

_Evento: El usuario reingresa un archivo PDF y lo escucha.

_Tipo: Manual.

_Curso de eventos:

Actor

Sistema

1.       El usuario ejecuta el programa.

2.       El programa despliega una ventana.

3.       El usuario ingresa en la opción de agregar un archivo PDF.

4.       El programa despliega una ventana parala selección de archivos.

5.       El usuario busca y selecciona el archivo PDF deseado.

6.       Se muestra en consola el texto deseado.

7.       Usuario puede leer el texto en consola y desea ingresar uno nuevo.

8.        El programa vuelve a desplegar una ventana para búsqueda de archivo

9.       Usuario ingresa el nuevo archivo PDF.

10.  Programa muestra el nuevo texto en consola.

11.  Usuario selecciona speak para reproducir el texto.

12.  El programa reproduce el texto hasta terminar.

13.  Usuario escucha al programa.

14.  El programa termina de leer y queda a la espera de nueva acción.

 

_Curso de eventos alternativos:

Primera variante: Si el usuario ingresa un formato que no sea PDF, saldrá un error en consola, y el programa estará en la espera de que se ingrese un archivo valido.

Segunda variante: Si se selecciona el botón speak antes de ingresar un archivo PDF, no ocurrirá nada ya que es necesario que exista un archivo PDF.

4.- Diseño de la solución:

Para la realización de este proyecto, se eso el IDLE InteliJ para realizar una aplicación basada en JavaFX, la cual se dividió en 3 etapas con el fin de cumplir objetivos de forma modular para así llegar al resultado final.

La primera etapa consta de poder extraer el texto de un archivo PDF e imprimirlo en consola. Para esto se usó la librería Apache PDFBox 3.0.0, la cual consta con las clases y métodos necesarios para extraer el manejo de PDF. Esta librería posee Licencia Apache, la cual es compatible con las licencias GPLv3 (pero no con la versión 1 y 2), ya que esta librería es de código abierto y de uso publico sin fines de lucro.

El resultado de esta etapa es el siguiente:

 

La segunda etapa consta de poder reproducir el texto extraído en la etapa 1 en formato de audio. Para ello, se usó la librería FreeTTS 1.2.2 la cual es un sintetizador de voz para poder reproducir audio en base a texto. Consta con sus propias voces de reproducción y también puede complementarse con mbrola la cual brinda diversos idiomas y voces para la reproducción de texto.

FreeTTS posee una licencia BSD (Berkeley Software Distribution) que es una licencia de software permisiva muy similar a las MIT License.

El resultado de esta prueba como es auditivo no se puede agregar resultado de esta etapa.

La tercera y ultima etapa es poder darle una interfaz grafica en la cual el usuario pueda seleccionar su PDF y poder reproducirlo sin necesidad de cambiar el código. Para esto se usaron los módulos proporcionados por JavaFX.

El resultado de esta etapa es el siguiente:

La unión de todas las etapas desemboca en un resultado final de la siguiente forma:

 

Este código fue realizado sobre el método main y las librerías correspondientes ya explicadas en etapa 1 y 2, en la cual se obtiene el siguiente diagrama UML:

 

Sobre el primer caso de uso se obtuvo el siguiente diagrama de secuencia:

 

5.- Pruebas:

A continuación, se muestra la secuencia de pasos demostrando la funcionalidad:

Primero se ejecuta el programa y se despliega su interfaz:

 

Después se selecciona “select file” y se despliega la ventana para seleccionar:

Ahora se selecciona el archivo deseado y este se muestra en consola:

Finalmente, si se selecciona el botón “speak” se reproduce el texto mostrado en consola.

Dificultades encontradas:

_Una dificultad fue poder usar tanto las librerías de PDFBox y FreeTTS en las versiones mas actuales de java, ya que la última versión de PDFBox (3.0.0) es compatible con java superior a la version 8, sin embargo, cambia algunos métodos. Para ajustarse a esto, se tuvo que buscar toda la documentación posible con respecto a la librería. Para el caso de FreeTTS, los ejemplos básicos son corridos en java 8 o inferior, lo que lo hacia incompatible con versiones superiores de java como la 11, 14, 15 o 16. Para solucionar esto, se investigo en distintos foros hasta encontrar que hay que realizar un System.setProperty() antes de crear las clases VoiceManager y Voice. Usando esto, el programa se hace compatible con versiones superiores a java 8. Fue probada en la versión 11, 14, 15 y 16.

_En el programa actual se encuentran 2 problemas, el primero es que no está implementado los textfield para ingresar los valores de inicio y termino de lectura y el otro problema es que la interfaz se bloquea al momento de reproducir el audio, por ende no se puede cerrar o cancelar la reproducción a menos que se haga un abort() por IDLE o línea de comando.

6.- Link de acceso al proyecto:

Usted puede descargarlo aquí:

            Proyecto_archivos\Proyecto_Conversor_PDF_a_Audio.rar