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)
174 lines
4.7 KiB
YAML
174 lines
4.7 KiB
YAML
version: 1
|
|
labels:
|
|
|
|
- label: "Bugfix"
|
|
title: '^fix(\([^)]*\))?:|^fix:.*'
|
|
|
|
- label: "enhancement"
|
|
title: '^feat(\([^)]*\))?:|^feat:.*'
|
|
|
|
- label: "build"
|
|
title: '^build(\([^)]*\))?:|^build:.*'
|
|
|
|
- label: "chore"
|
|
title: '^chore(\([^)]*\))?:|^chore:.*'
|
|
|
|
- label: "ci"
|
|
title: '^ci(\([^)]*\))?:|^ci:.*'
|
|
|
|
- label: "ci"
|
|
title: '^.*\(ci\):.*'
|
|
|
|
- label: "perf"
|
|
title: '^perf(\([^)]*\))?:|^perf:.*'
|
|
|
|
- label: "refactor"
|
|
title: '^refactor(\([^)]*\))?:|^refactor:.*'
|
|
|
|
- label: "revert"
|
|
title: '^revert(\([^)]*\))?:|^revert:.*'
|
|
|
|
- label: "style"
|
|
title: '^style(\([^)]*\))?:|^style:.*'
|
|
|
|
- label: "Documentation"
|
|
title: '^docs(\([^)]*\))?:|^docs:.*'
|
|
|
|
- label: "Documentation"
|
|
title: '^.*\(docs\):.*'
|
|
|
|
- label: "dependencies"
|
|
title: '^deps(\([^)]*\))?:|^deps:.*'
|
|
|
|
- label: "dependencies"
|
|
title: '^.*\(deps\):.*'
|
|
|
|
- label: 'API'
|
|
title: '.*openapi.*|.*swagger.*|.*api.*'
|
|
|
|
- label: 'v3'
|
|
base-branch: 'V3'
|
|
|
|
- label: 'Translation'
|
|
files:
|
|
- 'frontend/editor/public/locales/[a-zA-Z]{2}-[a-zA-Z\-]{2,7}/translation.toml'
|
|
- 'scripts/ignore_translation.toml'
|
|
- 'scripts/remove_translation_keys.sh'
|
|
- 'scripts/replace_translation_line.sh'
|
|
- 'scripts/translations/.*'
|
|
- '.github/scripts/check_language_toml.py'
|
|
- 'scripts/counter_translation_v3.py'
|
|
|
|
- label: 'Front End'
|
|
files:
|
|
- 'app/core/src/main/resources/static/.*'
|
|
- 'app/proprietary/src/main/resources/static/.*'
|
|
- 'frontend/**'
|
|
- 'frontend/.*'
|
|
- 'frontend/**/.*'
|
|
|
|
- label: 'Tauri'
|
|
files:
|
|
- 'frontend/editor/src-tauri/**'
|
|
- 'frontend/editor/src-tauri/.*'
|
|
|
|
- label: 'engine'
|
|
files:
|
|
- 'engine/**'
|
|
- 'engine/.*'
|
|
- 'engine/**/.*'
|
|
|
|
- label: 'Java'
|
|
files:
|
|
- 'app/common/src/main/java/.*.java'
|
|
- 'app/proprietary/src/main/java/.*.java'
|
|
- 'app/core/src/main/java/.*.java'
|
|
|
|
- label: 'Back End'
|
|
files:
|
|
- 'app/core/src/main/java/stirling/software/SPDF/config/.*'
|
|
- 'app/core/src/main/java/stirling/software/SPDF/controller/.*'
|
|
- 'app/core/src/main/resources/settings.yml.template'
|
|
- 'app/core/src/main/resources/application.properties'
|
|
- 'app/core/src/main/resources/banner.txt'
|
|
- 'app/core/src/main/resources/static/python/png_to_webp.py'
|
|
- 'app/core/src/main/resources/static/python/split_photos.py'
|
|
- 'app/core/src/main/resources/static/pipeline/defaultWebUIConfigs/**'
|
|
- 'application.properties'
|
|
|
|
- label: 'Security'
|
|
files:
|
|
- 'app/proprietary/src/main/java/stirling/software/proprietary/security/.*'
|
|
- 'scripts/download-security-jar.sh'
|
|
- '.github/workflows/dependency-review.yml'
|
|
- '.github/workflows/scorecards.yml'
|
|
|
|
- label: 'API'
|
|
files:
|
|
- 'app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java'
|
|
- 'app/core/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java'
|
|
- 'app/core/src/main/java/stirling/software/SPDF/controller/api/.*'
|
|
- 'app/core/src/main/java/stirling/software/SPDF/model/api/.*'
|
|
- 'app/core/src/main/java/stirling/software/SPDF/service/ApiDocService.java'
|
|
- 'app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/.*'
|
|
- 'app/core/src/main/resources/static/python/png_to_webp.py'
|
|
- 'app/core/src/main/resources/static/python/split_photos.py'
|
|
- '.github/workflows/swagger.yml'
|
|
|
|
- label: 'Documentation'
|
|
files:
|
|
- '.*.md'
|
|
- 'scripts/counter_translation.py'
|
|
- 'scripts/ignore_translation.toml'
|
|
|
|
- label: 'Docker'
|
|
files:
|
|
- '.github/workflows/build.yml'
|
|
- '.github/workflows/push-docker.yml'
|
|
- 'Dockerfile'
|
|
- 'Dockerfile.fat'
|
|
- 'Dockerfile.ultra-lite'
|
|
- 'exampleYmlFiles/.*.yml'
|
|
- 'scripts/download-security-jar.sh'
|
|
- 'scripts/init.sh'
|
|
- 'scripts/init-without-ocr.sh'
|
|
- 'scripts/installFonts.sh'
|
|
- 'test.sh'
|
|
- 'test2.sh'
|
|
- 'docker/**'
|
|
|
|
- label: 'Devtools'
|
|
files:
|
|
- '.devcontainer/.*'
|
|
- 'Dockerfile.dev'
|
|
- '.vscode/.*'
|
|
- '.editorconfig'
|
|
- '.pre-commit-config'
|
|
- '.github/workflows/pre_commit.yml'
|
|
- 'devGuide/.*'
|
|
- 'devTools/.*'
|
|
|
|
- label: 'Test'
|
|
files:
|
|
- 'app/common/src/test/.*'
|
|
- 'app/proprietary/src/test/.*'
|
|
- 'app/core/src/test/.*'
|
|
- 'testing/.*'
|
|
- '.github/workflows/scorecards.yml'
|
|
- 'exampleYmlFiles/test_cicd.yml'
|
|
|
|
- label: 'Github'
|
|
files:
|
|
- '.github/.*'
|
|
|
|
- label: 'Gradle'
|
|
files:
|
|
- 'gradle/.*'
|
|
- 'gradlew'
|
|
- 'gradlew.bat'
|
|
- 'settings.gradle'
|
|
- 'build.gradle'
|
|
- 'app/common/build.gradle'
|
|
- 'app/proprietary/build.gradle'
|
|
- 'app/core/build.gradle'
|