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