Everything you need to do to a PDF, on your own computer.
PDFree is a complete PDF application for Linux. It views, edits, converts, compresses, protects and organises PDF files — and it does all of it locally. No accounts, no uploads, no ads, no telemetry, no subscription, and no network access whatsoever.
It exists because on Linux there has never been one good PDF application. The usual advice is to assemble a toolkit: one program to annotate, another to reorder pages, LibreOffice Draw for edits, command-line tools or a website for merge and compress. The most capable option, Stirling PDF, is a web application you run through Docker in a browser. PDFree is the plain, native, offline desktop program that does all of it.
Read Continuous scrolling, zoom and fit modes, page thumbnails, bookmark navigation, and full-text search with highlighting. A 1000-page document opens in well under a second, because pages are only rendered as they come into view.
Organise pages A visual page manager: a thumbnail grid you drag to reorder, with rotate, delete, duplicate, insert-blank and insert-from-another-file, and full undo and redo. Nothing is written until you save, so nothing can end up half-done.
Merge any number of files with drag-to-order. Split by page range, every N pages, at bookmarks, or by file size. Extract, delete, duplicate, move, rotate, reverse and crop. Insert blank pages or pages from another document.
Also the awkward things: N-up printing, booklet imposition for folding and stapling, splitting double-page book scans down the real fold rather than the exact middle, and interleaving two scans — for when you scanned a double-sided stack on a one-sided feeder and got all the fronts in one file and all the backs, reversed, in another.
Make scans searchable OCR with Tesseract, in any installed language, including a different language per page — which is measurably more accurate than telling it "English and German" for the whole document. Straighten, de-speckle and clean up before reading. Real progress, and cancellation that actually stops.
Compress Quality presets, or a target file size it searches for. Shows you before and after, never touches your original, and refuses to make an image worse for no gain. A 2.6 MB scan-heavy document goes to 165 KB at the smallest setting, and every preset in between is a real trade you can see.
Convert PDF to images, text or HTML. Images to PDF (including multi-page TIFFs and animated GIFs). Markdown, HTML or plain text to a properly typeset PDF. Word, Excel, PowerPoint and ODF in both directions, where LibreOffice is installed.
Edit and annotate Highlight, underline, strike through, sticky notes, callouts, arrows, shapes, freehand ink and stamps — saved as standard PDF annotations, so everyone else's reader shows them and you can still delete them next year. A comment sidebar with replies.
Change text that is already on the page, in one of two clearly-labelled ways: Direct edit rewrites it using the document's own font, when the font allows it. Patch edit removes the old text and redraws it with the closest substitute. PDFree tells you which it is using and why, before you commit. Find-and-replace across the whole document.
Fill in and build forms Fill existing forms and save them filled or flattened. Create text boxes, tick boxes, radio buttons, drop-downs and signature fields. Import and export field data as XFDF, FDF or CSV.
Protect Add and remove passwords, choose the encryption strength, and set permissions — while being honest that permission flags are a request most readers ignore. Real redaction that deletes the underlying text and overwrites image pixels, then re-opens the result with a different engine and searches it to confirm the content is gone; if anything survived, the file is destroyed and you are told. Digital signatures. Sanitising, to strip JavaScript and anything that runs when a file is opened.
Document details Metadata and XMP, page labels, bookmarks (including generating them from detected headings), page numbers, headers and footers, Bates numbering, watermarks, and attaching or extracting embedded files.
Batch Fourteen of these operations run across a whole folder. The panel shows you exactly what will happen before anything happens — every file, where its result will go, and for the ones it will skip, why. Your originals are never touched unless you explicitly choose to replace them, and cancelling mid-run leaves finished work in place and no partial files.
Download from the latest release.
Bundles Ghostscript, Tesseract and the English OCR data, so OCR and PDF/A work without installing anything else.
flatpak install PDFree.flatpaksudo apt install ./pdfree_0.1.0_all.debsudo dnf install ./pdfree-0.1.0-1.fc42.noarch.rpmchmod +x PDFree-0.1.0-x86_64.AppImage
./PDFree-0.1.0-x86_64.AppImageThe AppImage bundles Python and PDFree's own dependencies, but not Tesseract or
LibreOffice — those are large, and it uses whatever is on your system. Install
tesseract-ocr from your distribution if you want OCR, or use the Flatpak.
PDFree works without any of these and explains what a feature needs when you reach for it. Help → System check shows what was found and gives you the exact install command for your distribution.
| For | Install |
|---|---|
| OCR | tesseract-ocr and a language pack such as tesseract-ocr-eng |
| Better OCR | ocrmypdf, unpaper |
| Word/Excel conversion | libreoffice |
| PDF/A archiving | ghostscript |
| Digital signatures | pip install pyhanko pyhanko-certvalidator |
| Key | Does |
|---|---|
Ctrl+O |
Open a PDF |
Ctrl+W |
Close the document |
Ctrl+K |
Find a tool |
Ctrl+Shift+P |
Arrange pages |
Ctrl+B |
Batch |
Ctrl+F |
Find in the document |
F3 / Shift+F3 |
Next / previous match |
Ctrl+= / Ctrl+- |
Zoom in / out |
Ctrl+0 |
Actual size |
Ctrl+1 / Ctrl+2 |
Fit width / fit page |
Ctrl+↑ / Ctrl+↓ |
Previous / next page |
Page Up / Page Down |
Scroll a screen |
Ctrl+Home / Ctrl+End |
First / last page |
Space / Shift+Space |
Scroll down / up |
Ctrl+scroll |
Zoom |
F1 |
This list, in the app |
In the page manager:
| Key | Does |
|---|---|
Ctrl+Z / Ctrl+Shift+Z |
Undo / redo |
Ctrl+← / Ctrl+→ |
Rotate selected pages |
Delete |
Remove selected pages |
Ctrl+D |
Duplicate selected pages |
Ctrl+A |
Select all |
Ctrl+S |
Save as |
PDFree has fifty-nine operations, which is enough to become an unusable wall of buttons if arranged badly. So it isn't arranged as a menu tree.
Press Ctrl+K, or just start typing on the Home screen, and describe what you
want in ordinary words. "shrink" finds Compress. "email" finds Compress, target
size, and split by file size. "censor" finds Redact. "damaged" finds Repair and
the health check. Everything is also grouped by task if you'd rather browse.
Things that are genuinely limited, rather than broken:
- Reflow editing is not implemented, on purpose. Deleting a sentence cannot make the rest of the paragraph move up, because nothing in a PDF records that those glyphs form a paragraph. Applications that appear to do this are guessing, and produce overlapping text on anything complicated. PDFree edits text in place and says so.
- Text in a subsetted font can't be edited directly. Subsetting often strips the font's character map, leaving the shapes but no record of which letter each shape is — so it can't be asked for new characters at all. PDFree detects this and falls back to patch editing, explaining why.
- XFA forms are filled through their standard AcroForm side, which is what every non-Adobe reader does. Adobe Acrobat may show the fields as empty; save the form flattened if the recipient uses Acrobat. XFA-only forms (with no AcroForm at all) can't be filled by any non-Adobe software.
- PDF to Word/Excel is approximate. A PDF records no paragraphs, tables or styles, so LibreOffice infers them. It's a useful starting point, not a copy.
- Accessibility tagging can be reported but not invented. PDFree will set the document language, title and related flags, but will not fabricate a structure tree: guessed reading order that claims to be authoritative is worse for a screen-reader user than none, because assistive technology trusts it. Proper tagging has to happen where the document is authored.
- Some damaged files can be made readable but not clean. Repair tries gentle methods first; if the result still has structural problems it says so and offers a page-by-page rebuild, which produces a clean file at the cost of bookmarks and forms.
unpaperis not bundled in the Flatpak. Its build requires Sphinx purely to generate a man page, which is a poor trade for one optional pre-OCR cleanup step. PDFree detects its absence and skips only the "clean up specks before reading" option; everything else about OCR is unaffected.- The Flatpak is not on Flathub yet. The bundle builds and is attached to
every release, but listing it on Flathub needs a human to open a pull request
against
flathub/flathub— that part cannot be automated. - Ghostscript is required for PDF/A and there's no adequately-licensed alternative. Without it, that one feature reports itself unavailable.
git clone https://github.com/justlinuxnoob/PDFree
cd PDFree
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,sign,ocr]"
python -m pdfreepytest -q # everything
pytest -q -m "not slow" # skip the long ones
pytest -q tests/test_preservation.py # the content-loss checksThe suite generates its own 54-fixture corpus — CJK and RTL text, subsetted fonts, forms, annotations, encrypted files, a 1000-page document, truncated and malformed files, zero-byte files, files with the wrong extension, and awkward filenames including emoji. It verifies output with different engines from the ones that wrote it: qpdf and poppler alongside MuPDF.
Install qpdf, poppler-utils, tesseract-ocr and ghostscript to run the
whole thing; anything absent is skipped rather than failed.
bash packaging/deb/build-deb.sh dist/
bash packaging/appimage/build-appimage.sh dist/
flatpak-builder --force-clean --repo=repo build \
packaging/flatpak/io.github.justlinuxnoob.PDFree.ymlpdfree/core/ Processing. No Qt anywhere, so it's testable headlessly
assemble.py The one place a page tree is rebuilt — merge, split, extract,
reorder and rotate are all this with different inputs
structure.py Bookmarks, links, named destinations and page labels
ops/ One module per family of operations
batch.py Running an operation across a folder
pdfree/ui/ PyQt6
toolspec.py Every operation described as data; the Home screen, the menus
and the search index are all generated from it
widgets/ One generic dialog renders any tool
viewer/ Lazy page rendering
tests/ Including corpus.py, which generates the test corpus
Two ideas carry most of the weight. The page assembler means the fiddly part — carrying bookmarks, hyperlinks, page labels and form fields across a page-tree rebuild — is written and tested once instead of six times. The tool catalogue means adding an operation is a data entry rather than another dialog.
No code was copied from any of these. They shaped PDFree by showing what works, and — through their issue trackers — what users actually struggle with.
- PDF Arranger — the visual page manager model. Its issue tracker is where the priority on preserving hyperlinks, bookmarks and page labels through page operations came from; that is its most-reported class of bug, and it drove the design of PDFree's assembler.
- Stirling PDF — the breadth of what a PDF toolkit should cover. Its most-requested feature is interactive form building, which PDFree has.
- Okular — annotation and review UX. Its historical practice of storing annotations in a sidecar file, and the "my highlights vanished when I emailed the file" complaints that followed, is why PDFree writes standard annotations into the document.
- Xournal++ — freehand annotation, and a reminder that marks drawn into page content are invisible to other readers' comment lists.
- OCRmyPDF — does the genuinely hard parts of OCR properly, and PDFree uses it. Its exit codes are translated into plain language.
- qpdf and pikepdf — structural surgery, encryption and repair, and the checker the tests verify against.
- MuPDF and PyMuPDF — rendering, text geometry, annotations and redaction. Fast enough to make a responsive viewer on modest hardware.
- pyHanko — digital signatures, and the discipline of reporting why a signature is or isn't trustworthy instead of one green tick.
- Poppler — the independent engine the test suite checks output against.
- Ghostscript — PDF/A conversion.
- PDF4QT, Evince/Papers, and the commercial tools (Acrobat, PDF Studio, PDF Expert) — interface conventions and keyboard shortcuts people already know.
AGPL-3.0-or-later. This was forced by the dependencies rather than chosen for its own sake: PyMuPDF is AGPL-3.0 and PyQt6 is GPL-3.0, and AGPL-3.0 is the only licence a combined work of both can honestly be offered under. The full reasoning, including the careful look Ghostscript's licensing deserves, is in LICENSE-NOTES.md.
For you as a user this changes nothing: PDFree runs on your computer, the AGPL's network clause has no effect on a local program, and you may use it for anything including commercial work. It matters only if you modify PDFree and then distribute it or run it as a network service.
See CONTRIBUTING.md. Bug reports with the Help → System check output attached are especially useful.