A few months ago I built FileForge Tools, a free site for everyday file conversions (image, PDF, text, dev utilities) that runs entirely in the browser. No file ever touches a server. This week I shipped the update I've wanted to build since day one: real PDF conversion tools.
What's new
PDF to JPG, every page of a PDF becomes a JPG image, with resolution and quality controls. Download pages individually or grab everything as a ZIP.
PDF to Word, extracts the text layer of a PDF into an editable .docx file. It reconstructs paragraphs from the PDF's positioned text data, and it explicitly detects and warns when a PDF is a scan with no selectable text (rather than silently producing garbage).
PDF to Google Docs, same conversion engine, but the page is written for the "I just need this open in Docs" search intent, with a quick guide for the Drive import step.
PDF to PowerPoint, renders each page at high resolution and drops it into a .pptx where the slide dimensions match your document's aspect ratio, so nothing gets stretched or cropped.
How it stays private
All four tools run on pdf.js in the browser, the same rendering engine Firefox uses for its built-in PDF viewer. The .docx files are built with the docx npm package, and the .pptx files with pptxgenjs. Everything happens in memory on your device; nothing is uploaded anywhere. You could disconnect your Wi-Fi mid-conversion and it'd still finish.
This did surface a genuinely annoying bundling problem worth sharing: pptxgenjs pulls in Node built-ins (fs, https) that don't exist in a browser. Webpack refused to bundle it until I added a NormalModuleReplacementPlugin in next.config.mjs to strip the node: scheme and fall back cleanly. If you're bundling pptxgenjs for the browser, that's the fix.
The other gotcha: pdf.js needs its standard font and cMap data files to render PDFs that reference fonts like Helvetica without embedding them (extremely common), or that use CJK character maps. Those normally live in node_modules, which a browser can't reach, so I copied them into /public/pdfjs/ and pointed standardFontDataUrl / cMapUrl at them. Skip this and you get silently broken glyphs on a chunk of real-world PDFs, not an obvious crash.
Also new: three guides
- Converting a PDF to Word without losing formatting, and why complex layouts sometimes break
- PDF to JPG: when it's the right call, resolution and quality settings explained
- Presenting a PDF like an actual slide deck, PDF to PowerPoint, and when to use it over PDF to Word
Try it
fileforgetools.in/pdf-to-word ยท pdf-to-jpg ยท pdf-to-powerpoint
Built with Next.js 14, deployed on Vercel. Happy to answer questions about the pdf.js/webpack setup if anyone's fighting the same bundling issues.
Top comments (0)