Cómo construir tu propio powerhouse de PDF en Kotlin sin enviar datos a la nube
Últimamente, necesitaba comprimir rápidamente un documento PDF pesado en mi smartphone. Abrí Google Play, escribí en la búsqueda, y... me desanimé. La mayoría de las apps están llenas de anuncios, requieren una suscripción, o — lo peor de todo — envían tu archivo a algún servidor de terceros para procesarlo. Para documentos con datos personales o informes de trabajo, esto simplemente no es una opción.
En GitHub, encontré el proyecto PDF Toolkit del desarrollador Karna14314. Es una utilidad completamente offline para Android, escrita en Kotlin y Jetpack Compose. Hace todo lo que hacen las alternativas de pago, pero siguiendo un principio de privacidad primero: sin internet, sin análisis, y sin nube.
Qué puede hacer esta navaja suiza
El autor empaquetó prácticamente todas las operaciones básicas que podrías necesitar al trabajar con documentos en la app. Si desglosamos las funcionalidades por categoría, obtenemos una lista decente.
Primero, están las manipulaciones clásicas de páginas. Puedes fusionar varios archivos en uno (Merge) o, por el contrario, dividir un documento en partes. Hay un editor visual donde puedes arrastrar páginas con el dedo para cambiar su orden, o simplemente eliminar las que no necesitas. Para archivos pesados, hay compresión sin pérdida de legibilidad.
Segundo, conversión. La app puede convertir imágenes de tu galería en PDF y viceversa — extraer páginas del documento en formato JPG, PNG o WebP. Incluso hay una función de escaneo integrada: apuntas la cámara, la app encuentra los bordes de la página por sí sola, y crea un escaneo limpio.
Tercero, trabajo de contenido y seguridad. Puedes agregar marcas de agua, establecer contraseñas en archivos (o eliminarlas si conoces la anterior), e incluso firmar documentos directamente en la pantalla. El OCR — reconocimiento de texto de imágenes — merece una mención especial.
Interior técnico
Para los desarrolladores de Android, PDF Toolkit es interesante por su arquitectura. El proyecto es reciente, así que usa un stack moderno:
- UI: Completamente en Jetpack Compose siguiendo las convenciones de Material Design 3.
- Arquitectura: MVVM clásico combinado con Clean Architecture. El código está muy bien organizado, la lógica de procesamiento de PDF está separada de la capa de UI.
- Procesamiento de PDF: Usa PdfBox-Android. Este es un puerto de la conocida biblioteca de Apache que funciona de manera confiable bajo el capó del sistema operativo móvil.
- OCR (Reconocimiento de texto): Aquí el autor usó una solución interesante con build flavors.
Hay tres variantes de compilación disponibles en el repositorio:
- Play Store: Usa Google ML Kit para reconocimiento de texto. Esto hace que el APK sea más pequeño (se descargan aproximadamente 40 MB en el primer lanzamiento), pero añade una dependencia del servicio propietario de Google.
- F-Droid / Opensource: Estas versiones usan Tesseract (biblioteca tess-two). Este es un motor completamente abierto que funciona 100% offline. Perfecto para quienes quieren máxima independencia de proveedores.
Se usan Coroutines y Flow para tareas asíncronas, y el almacenamiento local de datos (como el historial de operaciones) se basa en Room y DataStore.
Por qué vale la pena estudiarlo
Si programas en Kotlin, el proyecto es un gran ejemplo de cómo trabajar con archivos pesados e imágenes en Android. En el código, puedes encontrar implementaciones de CameraX para escaneo de documentos o uso de AndroidX Ink para anotaciones y firmas.
El manejo de imágenes está implementado de forma interesante. El proyecto usa varias bibliotecas populares a la vez: Coil para cargar, Glide para tareas específicas, y uCrop para recortar imágenes antes de insertarlas en el PDF.
A quién le será útil este proyecto
Si buscas una app lista para usar, PDF Toolkit es una herramienta honesta sin trampas ocultas. No pide acceso a internet (el permiso simplemente no está en el manifest), lo que significa que tus archivos físicamente no pueden salir de tu dispositivo.
Para los desarrolladores, esta es una plantilla de app lista para usar con una arquitectura adecuada. Puedes hacer fork del repositorio y agregar, por ejemplo, exportación a otros formatos o procesamiento específico de metadatos.
El proyecto se desarrolla activamente, el autor está abierto a pull requests. La única advertencia: para compilar desde el código fuente, necesitarás Android Studio Hedgehog o más reciente y JDK 17.
Compilar el proyecto es simple:
git clone https://github.com/Karna14314/Pdf_Tools.git
cd Pdf_Tools
# Если нужен полностью открытый вариант без Google-сервисов:
./gradlew assembleOpensourceRelease
Al final, tenemos un proyecto sólido de código abierto que resuelve un problema real de privacidad. En un mundo donde cada segunda app intenta recopilar datos sobre ti, utilidades como esta son un soplo de aire fresco.
Proyectos relacionados