DEV Community

Cover image for I Added PDF-to-Word, PDF-to-JPG, and PDF-to-PowerPoint to My Privacy-First File Tools Site
Rushikesh Lade
Rushikesh Lade

Posted on • Originally published at fileforgetools.in

I Added PDF-to-Word, PDF-to-JPG, and PDF-to-PowerPoint to My Privacy-First File Tools Site

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

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)