Add text, input boxes, pictures, signatures, delete pages, merge PDFs and password protect them. All happening in the browser, 100% free and no sign-up.
I tossed a legal document at it which was recently of passing interest to me, and it looks like embedded fonts still need some work. I'm not inclined to share a test case from what I have, which relates to a change of name and in any case was not really prepared by anyone especially competent when it comes to PDFs and their content; I tested with the first, facially void, version I was given. But it is possible I'll find more use for this tool, and if a shareable test case does come along then I'll do so. (And heaven knows with this document format, embedded fonts are a total nightmare always, even somehow in programmatic authoring. I'm not criticizing!)
On a similar note, a downloadable (single-file HTML or so, although these days some kind of HTTP service is a practical necessity) version would be nice to have. Low pri even from my perspective; it isn't that I spend a lot of time in places with no cell signal, so much as just that tethering on an a la carte plan gets out of hand pretty quick, since applications aren't at all required to honor or even notice the existence of the "data saver" option.
This is really neat! Thanks for posting it, I've bookmarked it for later use in the "just need a quick tweak" kind of case. I'll look forward to seeing how it develops!
Fonts on the web are super hard. There’s hardly any useful browser APIs for the kind of typesetting you need for PDFs: itemization, character bounding boxes, font file sub setting, etc. To solve or properly, you need to include a lot of code, e.g. all of harfbuzz compiled to wasm.
Well, that's the thing. Web fonts are hard. PDF fonts are super hard. Both at once is...actually maybe not hideous these days. Oh, I would not wish the task of devising such an algorithm, but the subset of vector fonts supported in PDF and that in browsers aren't totally disjoint, I think.
Modern processors can handle the relevant conversion math without really waking from sleep, which will no doubt make it more frustrating when some W3C third party resource security model WG fistfight from 2013 makes it impossible to both construct and use a webfont on the client. (There may be some hideous blob URL magic, but those are length constrained so you could up in N subset nonce fonts bucketing M custom glyphs from the source document, with a hideously complex fifty-case rewrite for all the p90 ways of mapping fonts in PDF (or is that 90 cases and p50?) to render the document in the editor. And then have to handle the actual editing cases, like what happens when your subset nonce font of a subset embedded font doesn't map any character to the keycode you just saw, and you want to try to give the user something with metrics sorta matching what they wanted instead of Helvetica or Times New Roman out of a naïvely constructed fontset.
I may have worked with PDF in browsers one time too many, before. But the idea of using WASM to smuggle real tools into this impoverished environment actually makes a lot of sense to me...
Emedded fonts only embed the used characters, so if ypu want to change "John" to "Mary" and there is no capital "M" elsewhere in the doccument, you are out of luck. Can this be your problem?
The mapping is incorrectly decoded and applied such that many characters for which glyphs are embedded and applied do not show them. It's a pretty common style of PDF mojibake, I think, and sometimes appears also with badly subsetted webfonts or "icon font" abortions if you disable page fonts in your browser settings.
I'll take a look at improving rendering embedded font support. And that's a neat idea to be able to download it for offline, I'll give some thought to that. Appreciate your feedback!
I love the idea of a downloadable version because I suspect there are a lot of business cases of
* Need to make a relatively narrow change to a PDF (add a line, reorder pages, concatenate two files)
* Adobe is $$$ and pretty much a subscription-only fiasco. Even the most trivial tasks are paywalled.
* Even if you're paying for Adobe at a corporate level, getting the IT clearance to get it installed might be more time sink than the actual task,
We have a server that had pdftk installed to generate some pre-filled documents and I ended up using that to concatenate two PDF files instead of fighting to get Real Acrobat.
Nice work. I've been building something lately to manipulate PDFs in the browser for privacy, although it's quite a different use case.
I think I see you're using pdf-lib and jspdf - both great libraries, and I'm using both, but:
(1) Have you seen the recent WASM compilation of MuPDF? I am also using it for some functions and find it really excellent with accessible APIs and highly functional. Worth an try!
(2) We chose different forks of the (unmaintained) pdf-lib - is there a reason you went with `pdf-lib-plus-encrypt`? I chose the cantoo fork, which seemed well-maintained to me - but I didn't research many others so would be interested to know if there is a good reason.
(1) Yes, I am very familiar with the WASM compilation of MuPDF. It's got a lot of great features. I actually built another product pdfredactoronline.com that does redaction fully in the browser using the MuPDF WASM compilation. The reason I don't use it in BreezePDF is MuPDF has an APGL license which requires open-sourcing any code that uses their software. Which, I guess technically anything fully browser based is essentially open sourced :) so perhaps I could use it here.
Since a lot of the basic functionality I've added so far is also covered by more permissible packages like the ones you mentioned, I've started out just using those. But thanks for bringing that up, I'll revisit using MuPDF for redaction and other features
(2) I went with pdf-lib-plus-encrypt because the original pdf-lib doesn't have functionality for password-protecting PDFs, and since pdf-lib-plus-encrypt does, I used it so I could have that feature
> Which, I guess technically anything fully browser based is essentially open sourced :) so perhaps I could use it here.
Open source isn't just about the source code being available (and when making web apps, there is often a compile step which makes the browser facing code not source code), but also about the license under which it is available.
It is in every sense of the word technically not open source.
My wife hit a wall trying to upload a hefty PDF - every “shrink” tool we tried barely compressed the size, and some even made it larger! Frustrated by the state of PDF compressors (looking at you, Adobe), I turned to LLMs - Claude, Deepseek, and Gemini came up short, but OpenAI’s o4-mini saved the day with a perfect solution.
That inspired me to build pdfmini: a tiny, open‑source, client‑side HTML app that crushes PDF sizes right in your browser!!!
No installs, no fees, zero privacy worries - all your data stays on your machine.
This gave me an idea. You seem to be the right person to talk to.
Here is my workflow.
Have a bunch of PDFs and images I need to combine.
I go to tools.PDF24.org,
Merge pdfs, then compress them, then more compress them because of size limits, then add or remove pages. Then add page numbers.
These are multiple steps.
Could we have a way of defining these terms at start, either textual or no-code-like or something where we could define stuff like
Take input, merge > compress with greyscale, Max size 1MB, add page numbers on bottom right
Or
Convert input to jpg with image size 8cm by 8cm
I know many people who simply fail at such stuff. They just throw their hands up in defeat.
Not saying we should have llms do the job but if we could have multiple actions so that people could tell the software what they have in mind.
People dont just compress PDFs, often merge and then compress.
I recently say pdfux.com but it is not as featureful as PDF24 but PDF24 crashes a lot.
Congratulations, you've managed to "compress" PDF files by rasterizing every page to JPEG, while destroying all the vector and textual information in it.
The resulting PDF is nothing like the input -- it's just a bunch of blurry JPEG images wrapped in a PDF format.
You can't search or copy the text, and trying to print it will just make a blurry mess of the text.
Nail it. I requested a 50% compression for a 200MB PDF file that contained pictures, and the tool made it an illegible mess. I can't imagine using this tool for anything serious, like tax returns, that requires a machine-readable file.
Seems cool! Thanks for sharing. Even though it's MIT licensed it's written in Java, so unfortunately I can't borrow any code, but it's nice for inspiration.
I created a similar offline tool during covid because I didn't want to upload sensitive data to random servers, it's open source if that can be useful to someone else : https://timothebarbe.github.io/pdfModer (Im not a front end dev, the UI is not very good)
For people who want a non web-based alternative, these days I use Xournal++ (https://xournalpp.github.io/) to do that type of edition locally.
What I am still looking for is a good way to clean scanned PDFs: split double pages, clean up text and make sure it is in lack and white, clean deformations and margin, cut and maybe rotate pages, compress the end result.
For the other issues, I haven’t found any single good tool, but I’ve stitched together things like unpaper, ghostscript and deskew ( https://github.com/galfar/deskew ).
Also, if you need OCR, hocr-tools and Google’s Document AI ocr API have worked really well for me (I tried Gemini, but you run into issues with big documents).
Great project! I'm also maintaining a fully in-browser data visualisation/analytics tool [1] and I often found it hard to convince people that their data isn't sent anywhere. It's funny I also say the exact same thing that they can inspect the Network tab. As a potential alternative to open-sourcing the codebase, maybe a desktop version of the same tool (i.e. an Electron app) could help address the privacy concerns if it explicitly states that it won't make network calls, although it's a perception problem rather than a technical one.
Yeah, you're right on that it's perception problem rather than tech. It's interesting because it's much less intuitive to inspect the code/network requests for a desktop app which on it's face seems less transparent than something on the web, but the kicker is that there is no URL that you're accessing it from so it feels safer.
I'm thinking now actually if I did a PWA? I think it has the psychological benefit of feeling of an offline desktop app (which it can function as), but is lightweight and less maintenance than an Electron app, while still having the benefit of automatically updating when I make improvements without needing to manually make updates.
Where I'm struggling on the open-source question is that in the PDF use case most of them are not developers and don't know what open source is let alone host it lol. And most businesses can probably afford to pay a nominal fee to host it themselves and modify it if they wish, which many companies offer. It would be different if the product was something like a database or code package where it's always going to be a developer using it.
While open source might actually have more "freedom" for people to modify it for free initially, in a way it can be more honest for a developer with any commercial intentions to not open source something while offering paid ways to modify the source code, as we're seeing more and more that companies start out with a very open source product that they then revert once the community has helped develop it. Not that it needs to happen that way, but with commercial aspirations one needs to be careful as something becomes popular, it becomes too tempting to take back once open-source parts.
Forgive the wall of text here, I'm thinking out loud haha. Appreciate your comment!
I ended up making my app installable as a PWA based on this conversation myself. Changes were straightfoward to add on top of a Vite + React application: https://github.com/visprex/visprex/pull/62/files
Yes as dimava commented above a PWA would be a great alternative.
> in a way it can be more honest for a developer with any commercial intentions to not open source something while offering paid ways to modify the source code
I appreciate that you made your commercial intentions clear in the comments and I agree that you don't want to walk back your license as it definitely leads to backlash. I think developers (i.e. people on HN) tend to trust open-core models more where there's a clear separation between the core open-source components and a paid offering but I guess you don't have to overindex on those given the general audience of this tool.
I don't know what your ultimate monetization goal is, but in my opinion one realistic path is an one-time only payment of some reasonable amount with the full feature as opposed to subscription (I saw your Stripe link in the source).
This is a great idea. I was actually just suggesting PWA with opt-in updates in another comment I was just replying to, so it's affirming to hear someone else suggest it as well. Love the changelog piece.
Now the question is if people would be willing to pay. Perhaps it could be a nominal one-time payment to get the PWA and updates for up to a limited amount of time, or monthly amount to get updates indefinitely.
And maybe the URL accessed web version stays free with the core features, and PWA has benefits of both offline and some extra features.
Would you be willing to pay for something like this?
Another alternative proposition to test data (non)upload is to ask your user to load the app, shut their device connection off and then use the app. The more cautious one will close the tab before switching the connection on.
Scrolling is broken. Also for modals, it'd be nice to be able to click anywhere on the screen to close it (or pressing Esc) rather than just pressing "cancel".
Also for text, different fonts is a necessary requirement (and bolding, italics, underline, etc).
Also, it seems like I can't edit text boxes after creating them... I can't even tell if I've selected the text box (an outline would be nice).
Also the confirm modal for deleting a page is realllly annoying. You should just have it automatically delete the page and create an undo feature. (Basically store the original PDF, and store all the "actions" a user makes in an array, and then undo/redo the actions to the original pdf).
Also the arrow to close the page overview on the left side of the screen is very unintuitive. Why does the entire page shift to the left? The only reason I'd use that feature is to see my centered page more clearly. On this topic, a zoom feature is super important too.
Overall, the concept of a privacy-based PDF editor sounds really cool!
Just note that for users to actually make a serious switch to this, you must at least match 1/4 of the quality of other PDF services like ilovepdf.com or smallpdf.com.
Scrolling is now fixed! And just updated so that if you click outside modal it closes. Working on update now so you can edit text you've already added.
Agree with you regarding fonts, bolding underlining etc. and having instant page deletion with undo/redo. Will definitely be adding soon.
Fixed the arrow closing the preview pane so that the page stays centered.
I plan on adding a lot more features so that it's on par with ilovepdf.com and smallpdf.com. The libraries I'm already using support many of the features they have, so it'll be easy to add them while keeping everything fully in the browser.
On a similar note, a downloadable (single-file HTML or so, although these days some kind of HTTP service is a practical necessity) version would be nice to have. Low pri even from my perspective; it isn't that I spend a lot of time in places with no cell signal, so much as just that tethering on an a la carte plan gets out of hand pretty quick, since applications aren't at all required to honor or even notice the existence of the "data saver" option.
This is really neat! Thanks for posting it, I've bookmarked it for later use in the "just need a quick tweak" kind of case. I'll look forward to seeing how it develops!
Modern processors can handle the relevant conversion math without really waking from sleep, which will no doubt make it more frustrating when some W3C third party resource security model WG fistfight from 2013 makes it impossible to both construct and use a webfont on the client. (There may be some hideous blob URL magic, but those are length constrained so you could up in N subset nonce fonts bucketing M custom glyphs from the source document, with a hideously complex fifty-case rewrite for all the p90 ways of mapping fonts in PDF (or is that 90 cases and p50?) to render the document in the editor. And then have to handle the actual editing cases, like what happens when your subset nonce font of a subset embedded font doesn't map any character to the keycode you just saw, and you want to try to give the user something with metrics sorta matching what they wanted instead of Helvetica or Times New Roman out of a naïvely constructed fontset.
I may have worked with PDF in browsers one time too many, before. But the idea of using WASM to smuggle real tools into this impoverished environment actually makes a lot of sense to me...
I'll take a look at improving rendering embedded font support. And that's a neat idea to be able to download it for offline, I'll give some thought to that. Appreciate your feedback!
PWAs are basically "installable" pages which open in their own browser window and generally can work offline
[1] https://developer.mozilla.org/en-US/docs/Web/Progressive_web...
* Need to make a relatively narrow change to a PDF (add a line, reorder pages, concatenate two files)
* Adobe is $$$ and pretty much a subscription-only fiasco. Even the most trivial tasks are paywalled.
* Even if you're paying for Adobe at a corporate level, getting the IT clearance to get it installed might be more time sink than the actual task,
We have a server that had pdftk installed to generate some pre-filled documents and I ended up using that to concatenate two PDF files instead of fighting to get Real Acrobat.
I think I see you're using pdf-lib and jspdf - both great libraries, and I'm using both, but:
(1) Have you seen the recent WASM compilation of MuPDF? I am also using it for some functions and find it really excellent with accessible APIs and highly functional. Worth an try!
(2) We chose different forks of the (unmaintained) pdf-lib - is there a reason you went with `pdf-lib-plus-encrypt`? I chose the cantoo fork, which seemed well-maintained to me - but I didn't research many others so would be interested to know if there is a good reason.
Since a lot of the basic functionality I've added so far is also covered by more permissible packages like the ones you mentioned, I've started out just using those. But thanks for bringing that up, I'll revisit using MuPDF for redaction and other features
(2) I went with pdf-lib-plus-encrypt because the original pdf-lib doesn't have functionality for password-protecting PDFs, and since pdf-lib-plus-encrypt does, I used it so I could have that feature
Open source isn't just about the source code being available (and when making web apps, there is often a compile step which makes the browser facing code not source code), but also about the license under which it is available.
It is in every sense of the word technically not open source.
Try pdfmini now:
https://den-run-ai.github.io/pdfmini/
Source code for pdfmini:
https://github.com/den-run-ai/pdfmini
Here is my workflow. Have a bunch of PDFs and images I need to combine.
I go to tools.PDF24.org, Merge pdfs, then compress them, then more compress them because of size limits, then add or remove pages. Then add page numbers.
These are multiple steps.
Could we have a way of defining these terms at start, either textual or no-code-like or something where we could define stuff like
Take input, merge > compress with greyscale, Max size 1MB, add page numbers on bottom right
Or
Convert input to jpg with image size 8cm by 8cm
I know many people who simply fail at such stuff. They just throw their hands up in defeat.
Not saying we should have llms do the job but if we could have multiple actions so that people could tell the software what they have in mind.
People dont just compress PDFs, often merge and then compress.
I recently say pdfux.com but it is not as featureful as PDF24 but PDF24 crashes a lot.
# Convert images to PDF
img2pdf *.jpg -o images.pdf
# Merge PDFs
pdfunite file1.pdf file2.pdf images.pdf merged.pdf
# Compress
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf merged.pdf
# Remove unwanted pages (e.g., page 3)
pdftk compressed.pdf cat 1-2 4-end output final.pdf
# Add page numbers
pdfjam final.pdf --outfile final_numbered.pdf --pagecommand '{}' --landscape
Congratulations, you've managed to "compress" PDF files by rasterizing every page to JPEG, while destroying all the vector and textual information in it.
The resulting PDF is nothing like the input -- it's just a bunch of blurry JPEG images wrapped in a PDF format.
You can't search or copy the text, and trying to print it will just make a blurry mess of the text.
docker run -d -p 8080:8080 -e DOCKER_ENABLE_SECURITY=false --name stirling-pdf frooodle/s-pdf:latest
Lots of features, OP you should definitely check this out
For people who want a non web-based alternative, these days I use Xournal++ (https://xournalpp.github.io/) to do that type of edition locally.
What I am still looking for is a good way to clean scanned PDFs: split double pages, clean up text and make sure it is in lack and white, clean deformations and margin, cut and maybe rotate pages, compress the end result.
For the other issues, I haven’t found any single good tool, but I’ve stitched together things like unpaper, ghostscript and deskew ( https://github.com/galfar/deskew ).
Also, if you need OCR, hocr-tools and Google’s Document AI ocr API have worked really well for me (I tried Gemini, but you run into issues with big documents).
[1]: https://docs.visprex.com/
Yeah, you're right on that it's perception problem rather than tech. It's interesting because it's much less intuitive to inspect the code/network requests for a desktop app which on it's face seems less transparent than something on the web, but the kicker is that there is no URL that you're accessing it from so it feels safer.
I'm thinking now actually if I did a PWA? I think it has the psychological benefit of feeling of an offline desktop app (which it can function as), but is lightweight and less maintenance than an Electron app, while still having the benefit of automatically updating when I make improvements without needing to manually make updates.
Where I'm struggling on the open-source question is that in the PDF use case most of them are not developers and don't know what open source is let alone host it lol. And most businesses can probably afford to pay a nominal fee to host it themselves and modify it if they wish, which many companies offer. It would be different if the product was something like a database or code package where it's always going to be a developer using it.
While open source might actually have more "freedom" for people to modify it for free initially, in a way it can be more honest for a developer with any commercial intentions to not open source something while offering paid ways to modify the source code, as we're seeing more and more that companies start out with a very open source product that they then revert once the community has helped develop it. Not that it needs to happen that way, but with commercial aspirations one needs to be careful as something becomes popular, it becomes too tempting to take back once open-source parts.
Forgive the wall of text here, I'm thinking out loud haha. Appreciate your comment!
> in a way it can be more honest for a developer with any commercial intentions to not open source something while offering paid ways to modify the source code
I appreciate that you made your commercial intentions clear in the comments and I agree that you don't want to walk back your license as it definitely leads to backlash. I think developers (i.e. people on HN) tend to trust open-core models more where there's a clear separation between the core open-source components and a paid offering but I guess you don't have to overindex on those given the general audience of this tool.
I don't know what your ultimate monetization goal is, but in my opinion one realistic path is an one-time only payment of some reasonable amount with the full feature as opposed to subscription (I saw your Stripe link in the source).
Add a "Check for updates" button that redirects to chamgelog page in browser for extra points
Now the question is if people would be willing to pay. Perhaps it could be a nominal one-time payment to get the PWA and updates for up to a limited amount of time, or monthly amount to get updates indefinitely.
And maybe the URL accessed web version stays free with the core features, and PWA has benefits of both offline and some extra features.
Would you be willing to pay for something like this?
Also for text, different fonts is a necessary requirement (and bolding, italics, underline, etc).
Also, it seems like I can't edit text boxes after creating them... I can't even tell if I've selected the text box (an outline would be nice).
Also the confirm modal for deleting a page is realllly annoying. You should just have it automatically delete the page and create an undo feature. (Basically store the original PDF, and store all the "actions" a user makes in an array, and then undo/redo the actions to the original pdf).
Also the arrow to close the page overview on the left side of the screen is very unintuitive. Why does the entire page shift to the left? The only reason I'd use that feature is to see my centered page more clearly. On this topic, a zoom feature is super important too.
Overall, the concept of a privacy-based PDF editor sounds really cool! Just note that for users to actually make a serious switch to this, you must at least match 1/4 of the quality of other PDF services like ilovepdf.com or smallpdf.com.
Good luck!
Agree with you regarding fonts, bolding underlining etc. and having instant page deletion with undo/redo. Will definitely be adding soon.
Fixed the arrow closing the preview pane so that the page stays centered.
I plan on adding a lot more features so that it's on par with ilovepdf.com and smallpdf.com. The libraries I'm already using support many of the features they have, so it'll be easy to add them while keeping everything fully in the browser.
Thanks for the feedback!