locally hosted web application that allows you to perform various operations on PDF files
Go to file
dependabot[bot] b0f77b500e
build(deps): bump pypdf from 6.1.1 to 6.1.3 in /testing/cucumber in the pip group across 1 directory (#4725)
Bumps the pip group with 1 update in the /testing/cucumber directory:
[pypdf](https://github.com/py-pdf/pypdf).

Updates `pypdf` from 6.1.1 to 6.1.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/py-pdf/pypdf/releases">pypdf's
releases</a>.</em></p>
<blockquote>
<h2>Version 6.1.3, 2025-10-22</h2>
<h2>What's new</h2>
<h3>Security (SEC)</h3>
<ul>
<li>Allow limiting size of LZWDecode streams (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3502">#3502</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
<li>Avoid infinite loop when reading broken DCT-based inline images (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3501">#3501</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
</ul>
<h3>Bug Fixes (BUG)</h3>
<ul>
<li>PageObject.scale() scales media box incorrectly (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3489">#3489</a>)
by <a href="https://github.com/Nid01"><code>@​Nid01</code></a></li>
</ul>
<h3>Robustness (ROB)</h3>
<ul>
<li>Fail with explicit exception when image mode is an empty array (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3500">#3500</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
</ul>
<p><a href="https://github.com/py-pdf/pypdf/compare/6.1.2...6.1.3">Full
Changelog</a></p>
<h2>Version 6.1.2, 2025-10-19</h2>
<h2>What's new</h2>
<h3>Bug Fixes (BUG)</h3>
<ul>
<li>Fix handling of zero-length StreamObject (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3485">#3485</a>)
by <a href="https://github.com/Likend"><code>@​Likend</code></a></li>
</ul>
<h3>Robustness (ROB)</h3>
<ul>
<li>Deal with wrong size for incremental PDF files (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3495">#3495</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
<li>Improve handling for malformed cross-reference tables (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3483">#3483</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
</ul>
<h3>Developer Experience (DEV)</h3>
<ul>
<li>Use released Python 3.14 by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
<li>Use Mapping instead of dict in type hint of
update_page_form_field_values (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3490">#3490</a>)
by <a
href="https://github.com/stefan6419846"><code>@​stefan6419846</code></a></li>
</ul>
<p><a href="https://github.com/py-pdf/pypdf/compare/6.1.1...6.1.2">Full
Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md">pypdf's
changelog</a>.</em></p>
<blockquote>
<h2>Version 6.1.3, 2025-10-22</h2>
<h3>Security (SEC)</h3>
<ul>
<li>Allow limiting size of LZWDecode streams (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3502">#3502</a>)</li>
<li>Avoid infinite loop when reading broken DCT-based inline images (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3501">#3501</a>)</li>
</ul>
<h3>Bug Fixes (BUG)</h3>
<ul>
<li>PageObject.scale() scales media box incorrectly (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3489">#3489</a>)</li>
</ul>
<h3>Robustness (ROB)</h3>
<ul>
<li>Fail with explicit exception when image mode is an empty array (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3500">#3500</a>)</li>
</ul>
<p><a href="https://github.com/py-pdf/pypdf/compare/6.1.2...6.1.3">Full
Changelog</a></p>
<h2>Version 6.1.2, 2025-10-19</h2>
<h3>Bug Fixes (BUG)</h3>
<ul>
<li>Fix handling of zero-length StreamObject (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3485">#3485</a>)</li>
</ul>
<h3>Robustness (ROB)</h3>
<ul>
<li>Deal with wrong size for incremental PDF files (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3495">#3495</a>)</li>
<li>Improve handling for malformed cross-reference tables (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3483">#3483</a>)</li>
</ul>
<h3>Developer Experience (DEV)</h3>
<ul>
<li>Use released Python 3.14</li>
<li>Use Mapping instead of dict in type hint of
update_page_form_field_values (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3490">#3490</a>)</li>
</ul>
<p><a href="https://github.com/py-pdf/pypdf/compare/6.1.1...6.1.2">Full
Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4a613f3fbe"><code>4a613f3</code></a>
REL: 6.1.3</li>
<li><a
href="e51d07807f"><code>e51d078</code></a>
SEC: Allow limiting size of LZWDecode streams (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3502">#3502</a>)</li>
<li><a
href="f2864d6dd9"><code>f2864d6</code></a>
SEC: Avoid infinite loop when reading broken DCT-based inline images (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3501">#3501</a>)</li>
<li><a
href="b751ca2d30"><code>b751ca2</code></a>
ROB: Fail with explicit exception when image mode is an empty array (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3500">#3500</a>)</li>
<li><a
href="e13a1e0d1b"><code>e13a1e0</code></a>
BUG: PageObject.scale() scales media box incorrectly (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3489">#3489</a>)</li>
<li><a
href="0859b3579f"><code>0859b35</code></a>
REL: 6.1.2</li>
<li><a
href="623a700342"><code>623a700</code></a>
BUG: Fix handling of zero-length StreamObject (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3485">#3485</a>)</li>
<li><a
href="16c4c443d0"><code>16c4c44</code></a>
ROB: Deal with wrong size for incremental PDF files (<a
href="https://redirect.github.com/py-pdf/pypdf/issues/3495">#3495</a>)</li>
<li><a
href="54c0dd71f3"><code>54c0dd7</code></a>
DEV: Use released Python 3.14</li>
<li><a
href="9fad9ff0f2"><code>9fad9ff</code></a>
DEV: Use Mapping instead of dict in type hint of
update_page_form_field_value...</li>
<li>Additional commits viewable in <a
href="https://github.com/py-pdf/pypdf/compare/6.1.1...6.1.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pypdf&package-manager=pip&previous-version=6.1.1&new-version=6.1.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/Stirling-Tools/Stirling-PDF/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-29 19:40:45 +00:00
.claude JWT Authentication (#3921) 2025-08-11 12:27:42 +01:00
.devcontainer chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
.github build(deps): bump softprops/action-gh-release from 2.3.4 to 2.4.1 (#4676) 2025-10-29 19:40:34 +00:00
.vscode chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
app build(deps): bump io.micrometer:micrometer-core from 1.15.4 to 1.15.5 (#4746) 2025-10-29 19:39:42 +00:00
devGuide feat(common): add configurable maxDPI limit for PDF-to-image conversion (#4129) 2025-08-07 13:57:47 +01:00
devTools refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
docs pipeline bug, doc bugs, auto split new URL and doc (#2906) 2025-02-07 13:17:35 +00:00
exampleYmlFiles JWT Authentication (#3921) 2025-08-11 12:27:42 +01:00
gradle/wrapper Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
images Update screenshots (#2875) 2025-02-04 11:24:35 +00:00
scripts fix(ci): 🛡️mitigate CVE-2025-8869 by pinning pip to patched commit and upgrading dev dependency pins (#4630) 2025-10-16 22:40:14 +01:00
testing build(deps): bump pypdf from 6.1.1 to 6.1.3 in /testing/cucumber in the pip group across 1 directory (#4725) 2025-10-29 19:40:45 +00:00
.editorconfig chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
.git-blame-ignore-revs refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
.gitattributes refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
.gitignore refactor(ssrf): default enum MEDIUM prevents OFF=false (#4280) 2025-09-04 12:39:37 +01:00
.pre-commit-config.yaml 🤖 format everything with pre-commit by stirlingbot (#4075) 2025-08-02 23:18:48 +01:00
build.gradle build(deps): bump ch.qos.logback:logback-core from 1.5.19 to 1.5.20 (#4748) 2025-10-29 19:39:06 +00:00
CONTRIBUTING.md exception handling and exception improvements (#3858) 2025-07-02 16:51:45 +01:00
DATABASE.md feat(database): make backup schedule configurable via system keys (#4251) 2025-09-04 15:02:31 +01:00
Dockerfile build(deps): bump alpine from 3.22.1 to 3.22.2 (#4673) 2025-10-16 22:40:27 +01:00
Dockerfile.dev deps: Pin Python dev dependencies and lock hashes to remediate security alert 302 (#4173) 2025-08-24 22:03:12 +01:00
Dockerfile.fat build(deps): bump alpine from 3.22.1 to 3.22.2 (#4673) 2025-10-16 22:40:27 +01:00
Dockerfile.ultra-lite build(deps): bump alpine from 3.22.1 to 3.22.2 (#4673) 2025-10-16 22:40:27 +01:00
gradle.properties build(local): simplify writeVersion task with WriteProperties plugin and enable build caching (#4139) 2025-08-08 10:36:30 +01:00
gradlew Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
gradlew.bat Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
HowToUseOCR.md Improve Markdown documentation a bit 2024-12-22 17:37:58 +08:00
launch4jConfig.xml ci: enhance GitHub Actions workflows with Gradle setup, caching improvements, and Docker image testing (#3956) 2025-07-16 17:17:11 +01:00
LICENSE refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
README.md 🌐 Sync Translations + Update README Progress Table (#4692) 2025-10-16 22:37:00 +01:00
SECURITY.md Improve Markdown documentation a bit 2024-12-22 17:37:58 +08:00
settings.gradle refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00

Stirling-PDF

Docker Pulls Discord OpenSSF Scorecard GitHub Repo stars

Stirling PDF - Open source locally hosted web PDF editor | Product Hunt Deploy to DO

Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.

All files and PDFs exist either exclusively on the client side, reside in server memory only during task execution, or temporarily reside in a file solely for the execution of the task. Any file downloaded by the user will have been deleted from the server by that point.

Homepage: https://stirlingpdf.com

All documentation available at https://docs.stirlingpdf.com/

stirling-home

Features

  • Parallel file processing and downloads
  • Dark mode support
  • Custom download options
  • Custom 'Pipelines' to run multiple features in an automated queue
  • API for integration with external scripts
  • Optional Login and Authentication support (see here for documentation)
  • Enterprise features like SSO (see here for documentation)
  • Database Backup and Import (see here for documentation)

50+ PDF Operations

Organise

  • Merge: Combine multiple PDFs into one
  • Split: Divide PDFs into multiple files
  • Extract page(s): Extract specific pages from PDF
  • Remove: Delete pages from PDF
  • Crop PDF: Adjust PDF page boundaries
  • Rotate: Rotate pages in 90-degree increments
  • Adjust page size/scale: Resize page contents
  • Multi-Page Layout: Add multiple pages to PDF
  • PDF to Single Large Page: Convert to single continuous page
  • Organize: Rearrange PDF pages

Convert to PDF

  • Image to PDF: Convert images to PDF format
  • Convert file to PDF: Convert various common file types to PDF
  • HTML to PDF: Transform HTML documents to PDF
  • Markdown to PDF: Convert Markdown files to PDF
  • CBZ to PDF: Convert comic book archives
  • CBR to PDF: Convert comic book rar archives
  • Email to PDF: Convert email files to PDF
  • Vector Image to PDF: Convert vector images (PS, EPS, EPSF) to PDF format

Convert from PDF

  • PDF to Word: Convert to documet (docx, doc, odt) format
  • PDF to Image: Extract PDF pages as images
  • PDF to RTF (Text): Convert to Rich Text Format
  • PDF to Presentation: Convert to presentation (pptx, ppt, odp) format
  • PDF to CSV: Extract tables to CSV
  • PDF to XML: Convert to XML format
  • PDF to HTML: Transform to HTML
  • PDF to PDF/A: Convert to archival (PDF/A-1b, PDF/A-2b) format
  • PDF to Markdown: Convert PDF to Markdown
  • PDF to CBZ: Convert to comic book archive
  • PDF to CBR: Convert to comic book rar archive
  • PDF to Vector Image: Convert PDF to vector image (EPS, PS, PCL, XPS) format

Sign & Security

  • Sign: Add digital signatures
  • Remove Password: Remove PDF security
  • Add Watermark: Apply watermarks
  • Sign with Certificate: Certificate-based signing
  • Add Stamp to PDF: Apply digital stamps
  • Auto Redact: Automatically redact content
  • Change Permissions: Modify access permissions
  • Add Password: Apply PDF encryption
  • Manual Redaction: Manual content redaction
  • Remove Certificate Sign: Remove digital signatures
  • Sanitize: Clean PDF of potential security issues
  • Validate PDF Signature: Verify digital signatures

View & Edit

  • OCR / Cleanup scans: Optical Character Recognition
  • Add Image: Insert images into PDF
  • Extract Images: Extract embedded images
  • Change Metadata: Edit PDF metadata
  • Get ALL Info on PDF: Comprehensive PDF analysis
  • Advanced Colour options: Colour manipulation (various options for colour inversion, CMYK conversion)
  • Compare: Compare PDF documents
  • Add Page Numbers: Insert page numbering
  • Flatten: Flatten PDF layers, and interactive elements
  • Remove Annotations: Delete comments and markups
  • Remove Blank pages: Delete empty pages
  • Remove Image: Delete embedded images
  • View/Edit PDF: Interactive PDF editing
  • Unlock PDF Forms: Enable form editing
  • Add Attachments: Attach files to PDF

Advanced

  • Compress: Reduce file size
  • Pipeline: Automated workflow processing (OCR images pipeline, prepare PDFs for emailing pipeline)
  • Adjust Colours/Contrast: Colour and contrast adjustment
  • Auto Rename PDF File: Automatic file renaming
  • Auto Split Pages: Automatic page splitting
  • Detect/Split Scanned photos: Photo detection and splitting
  • Overlay PDFs: Layer PDFs over each other
  • Repair: Fix corrupted PDFs
  • Show JavaScript: Display embedded JavaScript
  • Auto Split by Size/Count: Split by file size or page count
  • Split PDF by Chapters: Chapter-based splitting
  • Split PDF by Sections: Section-based splitting
  • Scanner Effect: Apply scanner-like effects
  • Edit Table of Contents: Modify PDF bookmarks and TOC

📖 Get Started

Visit our comprehensive documentation at docs.stirlingpdf.com for:

  • Installation guides for all platforms
  • Configuration options
  • Feature documentation
  • API reference
  • Security setup
  • Enterprise features

Supported Languages

Stirling-PDF currently supports 40 languages!

Language Progress
Arabic (العربية) (ar_AR) 58%
Azerbaijani (Azərbaycan Dili) (az_AZ) 59%
Basque (Euskara) (eu_ES) 35%
Bulgarian (Български) (bg_BG) 65%
Catalan (Català) (ca_CA) 65%
Croatian (Hrvatski) (hr_HR) 94%
Czech (Česky) (cs_CZ) 67%
Danish (Dansk) (da_DK) 59%
Dutch (Nederlands) (nl_NL) 57%
English (English) (en_GB) 100%
English (US) (en_US) 100%
French (Français) (fr_FR) 87%
German (Deutsch) (de_DE) 98%
Greek (Ελληνικά) (el_GR) 64%
Hindi (हिंदी) (hi_IN) 64%
Hungarian (Magyar) (hu_HU) 98%
Indonesian (Bahasa Indonesia) (id_ID) 59%
Irish (Gaeilge) (ga_IE) 65%
Italian (Italiano) (it_IT) 95%
Japanese (日本語) (ja_JP) 89%
Korean (한국어) (ko_KR) 64%
Norwegian (Norsk) (no_NB) 63%
Persian (فارسی) (fa_IR) 61%
Polish (Polski) (pl_PL) 69%
Portuguese (Português) (pt_PT) 66%
Portuguese Brazilian (Português) (pt_BR) 72%
Romanian (Română) (ro_RO) 55%
Russian (Русский) (ru_RU) 88%
Serbian Latin alphabet (Srpski) (sr_LATN_RS) 95%
Simplified Chinese (简体中文) (zh_CN) 89%
Slovakian (Slovensky) (sk_SK) 49%
Slovenian (Slovenščina) (sl_SI) 68%
Spanish (Español) (es_ES) 93%
Swedish (Svenska) (sv_SE) 62%
Thai (ไทย) (th_TH) 56%
Tibetan (བོད་ཡིག་) (bo_CN) 62%
Traditional Chinese (繁體中文) (zh_TW) 95%
Turkish (Türkçe) (tr_TR) 95%
Ukrainian (Українська) (uk_UA) 67%
Vietnamese (Tiếng Việt) (vi_VN) 54%
Malayalam (മലയാളം) (ml_IN) 70%

Stirling PDF Enterprise

Stirling PDF offers an Enterprise edition of its software. This is the same great software but with added features, support and comforts. Check out our Enterprise docs

🤝 Looking to contribute?

Join our community: