Leitor de PDF com anotações, fichamentos e exportação ABNT — 100% offline, sem conta, sem rastreamento.
- Leitor de PDF com renderização lazy multi-página via
PdfRenderer - Camada de anotações — caneta, lápis, marca-texto e borracha com suporte a pressão de caneta stylus
- Seletor de espessura — três tamanhos pré-definidos por ferramenta (fino, médio, grosso)
- Balões de post-it — notas ancoradas a coordenadas do PDF, armazenadas em Room
- Marcações e fichamentos — captura de trechos com OCR opcional
- Exportação ABNT — metadados acadêmicos com saída
.MD,.TXTe.PDF - Pastas e rótulos — organização da biblioteca com drag-and-drop
- Backup/restauração — exportação em
.zipde toda a biblioteca - Sem rede — nenhuma permissão de internet, nenhuma conta, nenhuma telemetria
O projeto possui duas product flavors com propósitos distintos:
| Flavor | ID de build | OCR | Dependências proprietárias | Indicado para |
|---|---|---|---|---|
foss |
br.com.jotdown |
Manual (digitação) | ❌ Nenhuma | F-Droid, sideload |
full |
br.com.jotdown |
Automático via ML Kit | ✅ com.google.mlkit:text-recognition |
Distribuição alternativa |
# Flavor FOSS (sem dependências proprietárias) — recomendado para F-Droid
./gradlew assembleFossRelease
# Flavor completo (com OCR automático via Google ML Kit)
./gradlew assembleFullReleasePara o F-Droid use sempre
fossRelease.
O sufixo-FOSSé adicionado automaticamente aoversionNamepeloproductFlavor.
br.com.jotdown/
├── data/
│ ├── dao/ # DAOs do Room (DocumentDao, AnnotationDao, DrawingDao…)
│ ├── entity/ # Entidades persistidas
│ └── repository/ # DocumentRepository — única fonte de verdade
├── ui/
│ ├── screens/
│ │ ├── library/ # LibraryScreen — grade de documentos com drag-and-drop
│ │ ├── reader/ # ReaderScreen, DrawingLayer, ReaderToolsBar, ReaderTopBar
│ │ └── splash/ # SplashScreen
│ ├── theme/ # MaterialTheme, paleta de cores
│ └── viewmodel/ # LibraryViewModel, ReaderViewModel
└── JotdownApplication.kt
Stack:
- Jetpack Compose + Material 3
- Room (SQLite) para persistência
android.graphics.pdf.PdfRendererpara renderização- Navigation Compose com transições
slideInHorizontally - Kotlin Coroutines + StateFlow
| Item | Valor |
|---|---|
minSdk |
26 (Android 8.0 Oreo) |
targetSdk |
34 (Android 14) |
compileSdk |
34 |
| JVM target | 17 |
| Anti-feature | Flavor foss |
Flavor full |
|---|---|---|
| Proprietary deps | ❌ | ✅ ML Kit OCR |
| Network | ❌ | ❌ |
| Ads / Tracking | ❌ | ❌ |
| Account required | ❌ | ❌ |
Este programa é um software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU (GPL) conforme publicada pela Free Software Foundation, tanto a versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Consulte a Licença Pública Geral GNU para obter mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Se não, veja https://www.gnu.org/licenses/.
GPL-3.0-or-later © Walter Rebouças