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)
277 lines
4.5 KiB
Plaintext
277 lines
4.5 KiB
Plaintext
### Eclipse ###
|
|
.metadata
|
|
bin/
|
|
tmp/
|
|
*.tmp
|
|
*.bak
|
|
*.exe
|
|
*.swp
|
|
*~.nib
|
|
local.properties
|
|
.settings/
|
|
.loadpath
|
|
.recommenders
|
|
.classpath
|
|
.project
|
|
*.local.json
|
|
version.properties
|
|
|
|
#### Stirling-PDF Files ###
|
|
pipeline/
|
|
!pipeline/.gitkeep
|
|
customFiles/
|
|
configs/
|
|
watchedFolders/
|
|
clientWebUI/
|
|
!cucumber/
|
|
!cucumber/exampleFiles/
|
|
!cucumber/exampleFiles/example_html.zip
|
|
exampleYmlFiles/stirling/
|
|
/stirling/
|
|
/testing/file_snapshots
|
|
/testing/cucumber/junit/
|
|
/testing/cucumber/report.html
|
|
/testing/.failed_tests
|
|
/.test-state/
|
|
SwaggerDoc.json
|
|
|
|
# Runtime storage for uploaded files and user data (not Java source code)
|
|
app/core/storage/
|
|
|
|
# Frontend build artifacts copied to backend static resources
|
|
# These are generated by npm build and should not be committed
|
|
app/core/src/main/resources/static/assets/
|
|
app/core/src/main/resources/static/index.html
|
|
app/core/src/main/resources/static/locales/
|
|
app/core/src/main/resources/static/Login/
|
|
app/core/src/main/resources/static/classic-logo/
|
|
app/core/src/main/resources/static/modern-logo/
|
|
app/core/src/main/resources/static/og_images/
|
|
app/core/src/main/resources/static/samples/
|
|
app/core/src/main/resources/static/manifest-classic.json
|
|
app/core/src/main/resources/static/robots.txt
|
|
app/core/src/main/resources/static/pdfium/
|
|
app/core/src/main/resources/static/pdfjs/
|
|
app/core/src/main/resources/static/vendor/
|
|
# Note: Keep backend-managed files like fonts/, css/, js/, pdfjs/, etc.
|
|
|
|
# Gradle
|
|
.gradle
|
|
.gradle-home
|
|
.lock
|
|
|
|
# External tool builders
|
|
.externalToolBuilders/
|
|
|
|
# Locally stored "Eclipse launch configurations"
|
|
*.launch
|
|
|
|
# PyDev specific (Python IDE for Eclipse)
|
|
*.pydevproject
|
|
|
|
# CDT-specific (C/C++ Development Tooling)
|
|
.cproject
|
|
|
|
# CDT- autotools
|
|
.autotools
|
|
|
|
# Java annotation processor (APT)
|
|
.factorypath
|
|
|
|
# PDT-specific (PHP Development Tools)
|
|
.buildpath
|
|
|
|
# sbteclipse plugin
|
|
.target
|
|
|
|
# Tern plugin
|
|
.tern-project
|
|
|
|
# TeXlipse plugin
|
|
.texlipse
|
|
|
|
# STS (Spring Tool Suite)
|
|
.springBeans
|
|
|
|
# Code Recommenders
|
|
.recommenders/
|
|
|
|
# Annotation Processing
|
|
.apt_generated/
|
|
.apt_generated_test/
|
|
|
|
# Scala IDE specific (Scala & Java development for Eclipse)
|
|
.cache-main
|
|
.scala_dependencies
|
|
.worksheet
|
|
|
|
# Uncomment this line if you wish to ignore the project description file.
|
|
# Typically, this file would be tracked if it contains build/dependency configurations:
|
|
#.project
|
|
|
|
### Eclipse Patch ###
|
|
# Spring Boot Tooling
|
|
.sts4-cache/
|
|
|
|
### Git ###
|
|
# Created by git for backups. To disable backups in Git:
|
|
# $ git config --global mergetool.keepBackup false
|
|
*.orig
|
|
|
|
# Created by git when using merge tools for conflicts
|
|
*.BACKUP.*
|
|
*.BASE.*
|
|
*.LOCAL.*
|
|
*.REMOTE.*
|
|
*_BACKUP_*.txt
|
|
*_BASE_*.txt
|
|
*_LOCAL_*.txt
|
|
*_REMOTE_*.txt
|
|
|
|
### Java ###
|
|
# Compiled class file
|
|
*.class
|
|
|
|
# Log file
|
|
*.log
|
|
|
|
# BlueJ files
|
|
*.ctxt
|
|
|
|
# Mobile Tools for Java (J2ME)
|
|
.mtj.tmp/
|
|
|
|
# Package Files #
|
|
*.jar
|
|
*.war
|
|
*.nar
|
|
*.ear
|
|
*.zip
|
|
*.tar.gz
|
|
*.rar
|
|
*.db
|
|
build
|
|
app/core/build
|
|
app/common/build
|
|
app/proprietary/build
|
|
common/build
|
|
proprietary/build
|
|
stirling-pdf/build
|
|
frontend/editor/src-tauri/provisioner/target
|
|
|
|
# Byte-compiled / optimized / DLL files
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.pyo
|
|
|
|
# Virtual environments
|
|
.venv*
|
|
env*/
|
|
venv*/
|
|
ENV/
|
|
env.bak/
|
|
venv.bak/
|
|
|
|
# Env files (secrets / local overrides). Subproject .gitignore files whitelist any committed defaults.
|
|
.env*
|
|
!.env.saas.example
|
|
|
|
# VS Code
|
|
/.vscode/**/*
|
|
!/.vscode/settings.json
|
|
!/.vscode/extensions.json
|
|
|
|
# IntelliJ IDEA
|
|
.idea/
|
|
*.iml
|
|
out/
|
|
.junie/
|
|
|
|
# Ignore Mac DS_Store files
|
|
.DS_Store
|
|
**/.DS_Store
|
|
|
|
# cucumber
|
|
/cucumber/reports/**
|
|
|
|
# Certs and Security Files
|
|
*.p12
|
|
*.pk8
|
|
*.pem
|
|
*.crt
|
|
*.cer
|
|
*.cert
|
|
*.der
|
|
*.key
|
|
*.csr
|
|
*.kdbx
|
|
*.jks
|
|
*.asc
|
|
|
|
# Allow test fixture certificates (synthetic, no real credentials)
|
|
!frontend/src/core/tests/test-fixtures/certs/**
|
|
|
|
# SSH Keys
|
|
*.pub
|
|
*.priv
|
|
id_rsa
|
|
id_rsa.pub
|
|
id_ecdsa
|
|
id_ecdsa.pub
|
|
id_ed25519
|
|
id_ed25519.pub
|
|
.ssh/
|
|
|
|
# Allow the published GPG release signing public key (safe to share)
|
|
!docs/security/signing-key.pub
|
|
*ssh
|
|
|
|
# Taskfile checksum cache
|
|
.task/
|
|
|
|
# cache
|
|
.cache
|
|
.ruff_cache
|
|
.mypy_cache
|
|
.pytest_cache
|
|
.ipynb_checkpoints
|
|
.build-cache
|
|
|
|
|
|
**/jcef-bundle/
|
|
|
|
# node_modules
|
|
node_modules/
|
|
|
|
# weasyPrint
|
|
**/LOCAL_APPDATA_FONTCONFIG_CACHE/**
|
|
|
|
# Translation temp files
|
|
*_compact.json
|
|
*compact*.json
|
|
test_batch.json
|
|
*.backup.*.json
|
|
frontend/public/locales/*/translation.backup*.json
|
|
|
|
# Development/build artifacts
|
|
.gradle-cache/
|
|
scripts/pdf-collection/
|
|
**/tmp/
|
|
*.backup
|
|
|
|
# Type3 development data
|
|
docs/type3/signatures/
|
|
|
|
|
|
# Type3 sample PDFs (development only)
|
|
**/type3/samples/
|
|
|
|
**/application-dev-local.properties
|
|
|
|
# Claude
|
|
.claude/
|
|
|
|
# Playwright MCP screenshots / traces
|
|
.playwright-mcp/
|
|
*.playwright-mcp.png
|