PDF Tools
Full-stack / DocumentsA small PDF toolbox in the spirit of iLovePDF. Editing, merging, splitting and image conversion run in the browser with pdf.js and pdf-lib, so those files never leave the device. The server handles what a browser can't: Word to PDF through headless LibreOffice, PDF to Word through pdf2docx, and changing text that is already in the PDF. For that last one I click a line, type, and PyMuPDF removes the original glyphs from the page content with a redaction, so coloured backgrounds stay intact. It then redraws the line with the PDF's own embedded font when that font has every character needed. Embedded subsets rarely keep a usable cmap, so I rebuild one from how the page already uses the font. When characters are missing it falls back to the closest Noto CJK face (serif or sans, regular or bold), subsetted to just the new characters so the file stays small. Conversions share one queue that turns requests away when it gets long, since the host has two cores. A push to main deploys it through GitHub Actions.