Pdf reflow rework (#51)
* perf(pdf): native Pdfium-based reflow engine with auto-open Migrate PDF-to-Markdown reflow generation from PDFBox to a custom native implementation using Pdfium. This transition improves processing speed by ~10x and significantly reduces memory overhead. - Native JNI Bridge: Implemented `pdfium_bridge.cpp` using `dlopen` to hook into the existing `libpdfium.so` memory space. - Optimized Extraction: Replaced character-by-character JNI calls with bulk array retrieval (`getPageFontSizes`, `getPageFontWeights`), drastically reducing JNI boundary overhead. - Enhanced Accuracy: Improved Markdown formatting logic by using native font weight (bold) and relative font size variance (headers). - Thread Safety: Refactored generator to process pages sequentially while synchronized with the global `PdfiumCore.lock` to ensure stability across concurrent UI operations. - Seamless UX: Implemented a reactive auto-open system in the PDF viewer that tracks user intent and navigates to the reflow view immediately upon background task completion. * Improved PDF to Markdown conversion and added cache cleanup. - Implemented automated cleanup of imported file caches when deleting books. - Enhanced `PdfToMarkdownGenerator` with support for font flags (italics), improved kerning, and smarter paragraph wrapping. - Updated `NativePdfiumBridge` and C++ JNI code to extract font information flags from PDFium. * Implemented seamless file switching and enhanced reflow transition logic. Key changes include: - Added `switchToFileSeamlessly` to `MainViewModel` to handle state transitions and navigation when switching between PDF and reflowed text views. - Updated `generateAndImportReflowFile` to support automatic opening of the generated file at a specific page/chapter. - Integrated `NavigationEvent` and `CompletableDeferred` to manage asynchronous navigation and state updates during file switches. - Modified `EpubReaderScreen` and `PdfViewerScreen` to pass the current position when toggling between PDF and text modes. - Updated `AppNavigation` to move navigation logic out of the `NavHost` and added loading overlays to viewers to improve UI feedback during transitions.
This commit is contained in:
parent
acf282d4c7
commit
c61a264a65
11 changed files with 940 additions and 419 deletions
11
app/src/main/cpp/CMakeLists.txt
vendored
11
app/src/main/cpp/CMakeLists.txt
vendored
|
|
@ -65,12 +65,12 @@ set_target_properties(mobi PROPERTIES C_VISIBILITY_PRESET default)
|
|||
# FINAL NATIVE LIBRARY FOR THE APP
|
||||
# ===================================================================
|
||||
# 6. Define our final JNI wrapper library.
|
||||
# This single .so file will be loaded by the Android app.
|
||||
add_library(
|
||||
native-lib
|
||||
SHARED
|
||||
Woff2Converter.cpp
|
||||
mobi_jni_bridge.c # The placeholder file you created
|
||||
mobi_jni_bridge.c
|
||||
pdfium_bridge.cpp # Add this new file
|
||||
)
|
||||
|
||||
# 7. Tell our library where to find all necessary header files.
|
||||
|
|
@ -88,8 +88,9 @@ find_library(z-lib z)
|
|||
target_link_libraries(
|
||||
native-lib
|
||||
PRIVATE
|
||||
woff2dec # From woff2
|
||||
mobi # From libmobi
|
||||
woff2dec
|
||||
mobi
|
||||
${log-lib}
|
||||
${z-lib} # libmobi requires zlib
|
||||
${z-lib}
|
||||
dl
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue