mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-14 10:34:06 +02:00
## Summary Migrates `SplitPDFController`, `SplitPdfByChaptersController`, `SplitPdfBySizeController` from PDFBox to JPDFium. `SplitPdfBySectionsController` and `AutoSplitPdfController` are intentionally left on PDFBox (require JPDFium 1.0.2 features that don't exist yet). ## Benchmark (audited on `audit/jpdfium-split`, file `app/core/src/test/java/stirling/software/SPDF/bench/SplitBenchmark.java`) | Workload | PDFBox heap | JPDFium heap | PDFBox wall | JPDFium wall | |---|---|---|---|---| | 100 pp, chunk 10 | +21-26 MB | **+0.02 MB** | 80-106 ms | **25 ms** | | 300 pp, chunk 10 | +59 MB | **+1.0 MB** | 232 ms | **76 ms** | **98-99.9% heap reduction. 3-4.2x faster wall.** ## Hybrid - AcroForm-bearing splits keep PDFBox `FormUtils.pruneOrphanedFormFields` post-pass (FPDF_ImportPagesByIndex drops AcroForm dict). Sub-bench shows +1.0 MB / +27 ms - tightly bounded. - Metadata extraction stays on PDFBox. - `SplitPdfBySectionsController` - JPDFium `PdfPageSplitter` only does 2-up halving, not arbitrary MxN. - `AutoSplitPdfController` - needs PDFRenderer + zxing for QR markers. ## Test plan - [ ] 30/30 unit tests pass with PDFBox `Loader.loadPDF` as the oracle (assert page counts + document totals) - [ ] Existing cucumber feature `split.feature` continues to pass - [ ] AcroForm-bearing PDF round-trips without orphaned widgets (covered by existing FormUtils tests)
111 lines
1.3 KiB
Plaintext
111 lines
1.3 KiB
Plaintext
# Version control
|
|
.git/
|
|
.gitignore
|
|
.git-blame-ignore-revs
|
|
.gitattributes
|
|
|
|
# Build outputs
|
|
build/
|
|
*/build/
|
|
**/build/
|
|
out/
|
|
target/
|
|
**/target/
|
|
bin/
|
|
version_builds/
|
|
|
|
# Gradle caches (local, not what's in the container)
|
|
.gradle/
|
|
**/.gradle/
|
|
.gradle-home/
|
|
|
|
# Task (go-task) cache
|
|
.task/
|
|
|
|
# Node / frontend
|
|
node_modules/
|
|
**/node_modules/
|
|
frontend/node_modules/
|
|
frontend/dist/
|
|
frontend/playwright-report/
|
|
.npm/
|
|
.yarn/
|
|
|
|
# Tauri/desktop builds
|
|
src-tauri/target/
|
|
src-tauri/dist/
|
|
frontend/editor/src-tauri/target/
|
|
frontend/editor/src-tauri/dist/
|
|
|
|
# IDE and editor
|
|
.idea/
|
|
.vscode/
|
|
.settings/
|
|
.settings.zip
|
|
.classpath
|
|
.project
|
|
.devcontainer/
|
|
*.iml
|
|
*.ipr
|
|
*.iws
|
|
|
|
# Logs and temp files
|
|
*.log
|
|
*.tmp
|
|
*.pid
|
|
.DS_Store
|
|
Thumbs.db
|
|
logs/
|
|
|
|
# Docker itself
|
|
Dockerfile*
|
|
.dockerignore
|
|
|
|
# CI / CD configs (not needed in build context)
|
|
.github/
|
|
.circleci/
|
|
.gitlab-ci.yml
|
|
|
|
# Test reports
|
|
**/test-results/
|
|
**/jacoco/
|
|
test_*.pdf
|
|
|
|
# Testing and documentation (not needed in build)
|
|
testing/
|
|
docs/
|
|
devGuide/
|
|
devTools/
|
|
*.md
|
|
README*
|
|
|
|
# Separate projects not consumed by the Java/frontend build
|
|
commonforms-onnx/
|
|
|
|
# Runtime mount points used by docker-compose volumes, not build input
|
|
stirling/
|
|
customFiles/
|
|
configs/
|
|
|
|
# Claude Code workspace
|
|
.claude/
|
|
|
|
# Python caches
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
__pycache__/
|
|
**/__pycache__/
|
|
|
|
# Local env
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
!engine/.env
|
|
|
|
# Misc
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.DS_Store
|
|
.cache/
|