Jak zbudować własną stację PDF w Kotlinie bez wysyłania danych do chmury
Ostatnio potrzebowałem szybko skompresować ciężki dokument PDF na smartfonie. Otworzyłem Google Play, wpisałem w wyszukiwarkę i... zniechęciłem się. Większość aplikacji jest albo zasypana reklamami, wymaga subskrypcji, albo — co najgorsze — wysyła plik na jakiś zewnętrzny serwer do przetworzenia. Dla dokumentów z danymi osobowymi czy raportami z pracy to po prostu nie wchodzi w grę.
Na GitHubie natknąłem się na projekt PDF Toolkit autorstwa developera Karna14314. To w pełni offline'owe narzędzie dla Androida, napisane w Kotlinie i Jetpack Compose. Robi wszystko to, co płatne alternatywy, ale kieruje się zasadą prywatności: brak internetu, brak analityki, brak chmury.
Co potrafi ten szwajcarski scyzoryk
Autor zapakował do aplikacji praktycznie wszystkie podstawowe operacje, których możesz potrzebować podczas pracy z dokumentami. Jeśli podzielimy funkcje na kategorie, otrzymamy całkiem niezłą listę.
Po pierwsze, klasyczne operacje na stronach. Możesz scalić kilka plików w jeden (Merge) lub odwrotnie — podzielić dokument na części. Jest wizualny edytor, w którym możesz przeciągać strony palcem, aby zmienić ich kolejność, lub po prostu usunąć te, których nie potrzebujesz. Dla ciężkich plików dostępna jest kompresja bez utraty czytelności.
Po drugie, konwersja. Aplikacja potrafi zamienić obrazy z galerii na PDF i odwrotnie — wyeksportować strony dokumentu w formacie JPG, PNG lub WebP. Jest nawet wbudowana funkcja skanowania: kierujesz kamerę, aplikacja sama znajduje krawędzie strony i tworzy ładny skan.
Po trzecie, praca z treścią i bezpieczeństwo. Możesz dodawać znaki wodne, ustawiać hasła na plikach (lub je usuwać, jeśli znasz stare), a nawet podpisywać dokumenty bezpośrednio na ekranie. OCR — rozpoznawanie tekstu z obrazów — zasługuje na szczególną wzmiankę.
Budowa techniczna
Dla developerów Androida PDF Toolkit jest interesujący ze względu na swoją architekturę. Projekt jest świeży, więc wykorzystuje nowoczesny stack:
- UI: W pełni na Jetpack Compose zgodnie z konwencjami Material Design 3.
- Architektura: Klasyczny MVVM w połączeniu z Clean Architecture. Kod jest starannie zorganizowany, logika przetwarzania PDF jest oddzielona od warstwy UI.
- Przetwarzanie PDF: Wykorzystuje PdfBox-Android. To port dobrze znaniej biblioteki Apache, który działa niezawodnie pod maską mobilnego systemu operacyjnego.
- OCR (Rozpoznawanie tekstu): Tutaj autor użył ciekawego rozwiązania z build flavors.
W repozytorium dostępne są trzy warianty budowania:
- Play Store: Używa Google ML Kit do rozpoznawania tekstu. Dzięki temu APK jest mniejszy (około 40 MB pobiera się przy pierwszym uruchomieniu), ale dodaje zależność od zastrzeżonej usługi Google.
- F-Droid / Opensource: Te wersje używają Tesseract (biblioteka tess-two). To w pełni otwarty silnik, który działa w 100% offline. Idealny dla tych, którzy chcą maksymalnej niezależności od dostawców.
Do zadań asynchronicznych używane są Coroutines i Flow, a lokalne przechowywanie danych (jak historia operacji) opiera się na Room i DataStore.
Dlaczego warto to przestudiować
Jeśli piszesz w Kotlinie, projekt jest świetnym przykładem pracy z ciężkimi plikami i obrazami w Androidzie. W kodzie znajdziesz implementacje CameraX do skanowania dokumentów czy wykorzystania AndroidX Ink do adnotacji i podpisów.
Ciekawe jest też podejście do obsługi obrazów. Projekt używa od razu kilku popularnych bibliotek: Coil do ładowania, Glide do konkretnych zadań i uCrop do przycinania obrazów przed wstawieniem ich do PDF.
Kto skorzysta z tego projektu
Jeśli szukasz gotowej aplikacji dla siebie, PDF Toolkit to uczciwe narzędzie bez ukrytych haczyków. Nie prosi o dostęp do internetu (uprawnienie po prostu nie znajduje się w manifeście), co oznacza, że Twoje pliki fizycznie nie mogą opuścić Twojego urządzenia.
Dla developerów to gotowy szablon aplikacji z właściwą architekturą. Możesz zforkować repozytorium i dodać na przykład eksport do innych formatów czy specyficzne przetwarzanie metadanych.
Projekt jest aktywnie rozwijany, autor jest otwarty na pull requesty. Jedno zastrzeżenie: aby zbudować projekt ze źródeł, potrzebujesz Android Studio Hedgehog lub nowszego oraz JDK 17.
Budowanie projektu jest proste:
git clone https://github.com/Karna14314/Pdf_Tools.git
cd Pdf_Tools
# Если нужен полностью открытый вариант без Google-сервисов:
./gradlew assembleOpensourceRelease
Podsumowując, mamy solidny projekt open source, który rozwiązuje realny problem prywatności. W świecie, gdzie co druga aplikacja próbuje zbierać o Tobie dane, narzędzia takie jak to są orzeźwiającym powiewem.
Powiązane projekty