Online PDF Editor

· 3 min read

Free, privacy-first PDF editor that runs in the browser. Replace text, reorder pages, extract images and convert to Word — no install, no signup. Built with Flask + PyMuPDF on Google Cloud Run.

Free, privacy-first PDF editor that runs in the browser. Replace text, reorder pages, extract images and convert to Word — no install, no signup. Built with Flask + PyMuPDF on Google Cloud Run.

A PDF editor I built for myself — then made public

I work with a lot of PDFs: workshop manuals, parts documentation, invoices. The usual online editors either paywall the basics, push a desktop install, or quietly upload your files to a server you don’t control. I wanted something faster and cleaner — so I built pdf.uper.pl, a small suite of PDF tools that run straight in the browser.

It started as a private utility for my own workflow. It turned out useful enough that I decided to release it publicly, for free, with no signup and no tracking.

pdf.uper.pl landing page — Fast PDF editing right in your browser, a drag & drop zone and a grid of eight tools: Text Editor, PDF Pages, Images, Convert, JPG to PDF, Merge PDF, Compress PDF and Rotate PDF

What it does

The toolset covers the everyday PDF jobs that usually send people hunting for a desktop app:

Replace & remove text

Define multiple find-and-replace rules at once, with control over font, size and colour. Search the document to preview matches before processing.

Manage pages

Reorder pages by drag & drop, delete the ones you don't need, and add custom intro/outro cover pages. Full thumbnail preview of every page.

Extract images

Pull all graphics out of a PDF, filter them by size, and download single files or everything at once as a ZIP.

Convert to a document

Export PDF content to Markdown, plain text or Word (DOCX) — pick several formats at once and get them back in a ZIP.

JPG to PDF & Merge

Combine images into a single PDF, or merge several PDFs into one document.

Compress & Rotate

Shrink file size for email and uploads, or rotate pages by 90°, 180° or 270°.

Page management with live thumbnails

Upload a document and every page renders as a draggable thumbnail. Reorder by dragging, drop a page into the trash to remove it, and prepend or append a generated cover page — then download the rebuilt PDF.

PDF Pages tool — uploaded document shown as a grid of page thumbnails with drag-to-reorder, per-page delete and a Download modified PDF button

Batch text replacement

Each rule is a find/replace pair, and you can stack as many as you need to clean up a document in one pass — handy for swapping recurring strings across a long manual. A built-in search previews where each match sits before you commit.

Replace text in PDF tool — a step-by-step flow: choose a PDF file, define replacement rules with text-to-replace and new-text fields, preview search and a Process PDF button

Pull images out of a PDF

Point it at a PDF and every embedded photo or graphic is listed with its dimensions and file size. A minimum-size slider hides small icons and logos, then you grab a single image or all of them as a ZIP.

Extract images tool — a grid of photos pulled from a PDF, each labelled with its pixel dimensions and file size, plus a Download all as ZIP button

Convert to Markdown, Word or text

Extract the content of a PDF into an editable document — Markdown, plain text or Word (DOCX). Tick several formats and they come back together in a ZIP.

Convert tool — an uploaded PDF with Markdown, Text and Word output formats all selected and a Convert PDF button

Privacy by design

The whole thing is built around not keeping your data:

  • Files are processed in memory, only for the duration of the request — the upload and every generated artifact are removed right after the response.
  • No account, no signup. None of the tools require registration to use them.
  • All traffic is served over HTTPS, with Cloudflare in front of the origin.

For documents like invoices or signed contracts, “nothing is stored” isn’t a marketing line here — it’s how the request lifecycle actually works.

Bilingual from the ground up

The interface ships in Polish and English, each on its own set of URLs (/strony/en/pages) with proper hreflang and per-language SEO metadata, so each version is indexable on its own.

Technical Implementation

A deliberately small Flask monolith: page routes render the bilingual UI, a handful of /api/* endpoints do the PDF work with PyMuPDF, and the frontend styling is generated from the Spoko Design System via UnoCSS.

Python + Flask

A lightweight Flask app serving the bilingual pages and a thin JSON API. No heavyweight framework — small surface, fast cold starts.

PyMuPDF

Does the actual PDF heavy lifting: text search & replacement, page manipulation, image extraction and rendering thumbnails.

UnoCSS + SDS

Styling generated from the Spoko Design System as a static stylesheet, scanned straight from the Jinja templates.

Google Cloud Run

Containerised with Docker and deployed on Cloud Run, scaling to zero between requests. Auto-deploys from main via Cloud Build.

Vanilla JS frontend

Per-tool ES modules (dropzone, drawer, drag & drop pages) — no SPA framework, no build step on the client.

Cloudflare

Sits in front of the origin for TLS, caching of static assets and the public pdf.uper.pl domain.

It’s free to use and gains new tools over time. Try it at pdf.uper.pl.

Back to portfolio

Related posts

Read more