19 ms·
Show HN: I built a free alternative to Adobe Acrobat PDF viewer
I built EmbedPDF: an MIT-licensed, open-source PDF viewer that aims to match all of Adobe Acrobat’s paid features… for free.
Already working:
- Annotations (highlight, sticky notes, free text, ink)
- True redaction (content actually removed)
- Search, text selection, zoom, rotation
- Runs fully in the browser, no server needed
- Drop-in SDK for React, Vue, Preact, vanilla JS
Why? Acrobat is heavy, closed, and pricey. I wanted something lightweight, hackable, and embeddable anywhere.
Demo: https://app.embedpdf.com/ https://app.embedpdf.com/
Website: https://www.embedpdf.com/ https://www.embedpdf.com/
GitHub: https://github.com/embedpdf/embed-pdf-viewer https://github.com/embedpdf/embed-pdf-viewer
Feedback, bug reports, and feature requests welcome!
- gurjeet 1y agoGave it a quick try. Annotations didn't work at all in Fierfox, but all annotation types (underline, highlight, etc.) worked as expected in Chrome.
- bobsingor 1y agoI haven’t had the chance to test annotations in Firefox yet, so thanks for pointing that out. I’ll check what’s going on there, good to know they’re working fine in Chrome.
- grimgrin 1y agoIf you haven't checked yet, you'll notice: Uncaught ReferenceError: TouchEvent is not defined https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent#browser_compatibility https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent#...
- bobsingor 1y agoYep, that’s exactly the issue! I’ve fixed it so it no longer throws the TouchEvent error in Firefox. Thanks for flagging it.
- vrzucchini 1y agoSounds like a mobile-vs-desktop issue, since the error mentions TouchEvent. The Firefox error fires even when just hovering the cursor over the PDF in View mode, and text is also not selectable. While I'm here, a suggestion to add Undo/Redo; yes HN, I know I could make a PR..
- bobsingor 1y agoThanks for pointing that out! I’ve fixed the Firefox issue. And we actually already have Undo/Redo on the annotation toolbar.
- trog 1y agoRedaction doesn't seem to work in Firefox either. Otherwise looks great!
- bobsingor 1y agoThanks! The redaction issue in Firefox should now be fixed.
- trog 1y agoWould love some more info about how redaction works. We currently use Acrobat Pro for redaction mostly because of 'trust' issues, but I'd love to replace it with a web tool. I just need to convince our CFO that it's safe.
- ephimetheus 1y agoIs selecting text in the PDF supported? I can’t get that to work in iOS Safari.
- JKCalhoun 1y agoText selection broken on Mac OS Safari as well. Worked in Chrome on Mac OS.
- billconan 1y agoVery nice! I once had a side project with a built-in PDF viewer. My first version used pdf.js, but when zooming in quickly, it felt sluggish and hard to keep the zoom focus in the right place. So I built my own PDF viewer, this time using pdfium in C++ with Metal for rendering — here’s a quick demo: https://youtu.be/jJMhVn5yzEI https://youtu.be/jJMhVn5yzEI I implemented a tiling technique to balance memory usage and performance. I didn’t realize pdfium could be so performant in WebAssembly — and honestly, I actually prefer developing UI on the web compared to C++.
- bobsingor 1y agoHonestly, yours looks even snappier than what I had, the way it’s handling zoom feels super fluid. Really impressive work! Makes me want to dig back in and see if I can match that speed.
- billconan 1y agoThank you! Smooth zooming was the main thing I focused on optimizing. I haven’t implemented text search yet, that’s a whole other rabbit hole, with challenges like stitching text objects together and handling text normalization. My code runs natively, so users need to download a client and I have to code the rest of the ui in cpp, that’s the downside. I did consider a hybrid approach with Electron or Tauri, but dropped the idea to avoid IPC overhead and get the best possible performance.
- dotancohen 1y agoBut what it's worth, I as a user prefer native code with no Electron.
- billconan 1y agoBut it will be more difficult for me to support multiple platforms, do customizations on the ui etc. For example, I don't even own a windows pc.
- lucfranken 1y agoSeems to work great! Little note: when you switch from redaction to view with the redaction tool (red lines) active it stays active in the view mode. Impossible to scroll because it still redacts. Refresh fixes it.
- bobsingor 1y agoGood catch, I’ll fix that. On mobile, it’s intentional that scrolling is disabled while in redaction mode so you can make precise selections, but if you switch back to the view tab it should definitely exit redaction mode. Thanks for spotting it!
- lucfranken 1y agoNot sure if it matches your vision but I just took a look at the react example: https://www.embedpdf.com/docs/react/getting-started https://www.embedpdf.com/docs/react/getting-started I would suggest that you start with a more simple example. like: <EmbedPDF url={https://snippet.embedpdf.com/ebook.pdf https://snippet.embedpdf.com/ebook.pdf}/> It would just take one additional component in your NPM package which contains all the more "internal" stuff. Just put the advanced example you have now in one component. The example with the engine etcetera looks more like an advanced example. It gets a developer to a quick result in their own app. If they want to go further they can nothing changes there. A sidenote: That same though might be something with your NPM import - just one would be a better dev experience to start while I understand why you offer them separately for more advanced.
- bobsingor 1y agoThis is really valuable feedback, thank you! I agree, having a simple, ready-to-use `<EmbedPDF>` component that includes all the plugins by default would make it much easier to get started. I’ll definitely add that alongside the more advanced example.
- lysace 1y agoThe repo appears to contain a copy of Foxit’s/Google’s pdfium along with a UI and lots of abstraction layers/examples for various JavaScript frameworks. I’m not a JavaScript developer (perhaps there are cultural differences at play?), but in general I think it would be polite to credit the developers of the actual PDF engine.
- davorak 1y agoThe repo is marked with the pdfjs and pdfium topics so there is that. Beyond that, powered by... and similar make sense if the library/engine allows or encourages the behavior.
- bobsingor 1y agoAbsolutely, and I agree, credit is important. I have a whole section in the docs about PDFium and its origins with Foxit/Google: https://www.embedpdf.com/docs/pdfium/introduction https://www.embedpdf.com/docs/pdfium/introduction.
- lysace 1y agoThat’s neat. I would also mention it in the README.md.
- looperhacks 1y agoI tried a random PDF that includes an annotation, but the annotation didn't show up. I assume the annotations this supports are no real annotations?
- bobsingor 1y agoWe already support quite a few real PDF annotations: circle, square, polygon, polyline, highlight, underline, squiggly, strikeout,free text, stamps, and ink. Some types are still on our list, like links, form fields, sound annotations, file attachments, and 3D models. Do you happen to know what annotation type it is in your PDF? I’m curious.
- JKCalhoun 1y agoIn my experience links and form fields are the two above you encounter most often in the real world. The problem with forms though is that you potentially open up scripting, for better or worse. I mean you're already in Javascript, so you could handle it a lot easier than Preview on MacOS could, but it is of course worrisome that you'll be running code from an arbitrary PDF… I wish I was still working at Apple and had my suite of nasty PDF's to test with. Some were just huge files (like a catalog for McMaster-Carr or wherever), another (a version of The Bible?) had an odd text layout across the columns on each page (for testing text selection), maybe one file was a huge single-page PDF street-map of a city (with lots and lots of rendering code and arbitrary text runs all across the map, etc.).
- gorgoiler 1y agoMIT license is generous. Good for you, and thanks!
- bobsingor 1y agoThanks! I wanted to make it as easy as possible for people to use, tweak, and build on top of it, so MIT felt like the right choice.
- layer8 1y agoThe underlying PDFium is Apache 2.0 though, and it looks to me that the present project doesn’t currently comply with https://www.apache.org/licenses/LICENSE-2.0#redistribution https://www.apache.org/licenses/LICENSE-2.0#redistribution for that dependency.
- bobsingor 1y agoGood point, you’re right that PDFium is Apache 2.0. I’ve updated the project to comply with the redistribution requirements in this PR: https://github.com/embedpdf/embed-pdf-viewer/pull/80/files https://github.com/embedpdf/embed-pdf-viewer/pull/80/files. Thanks for flagging it!
- slig 1y agoThank you for sharing and being so generous with the licensing. I know this might be way out of scope, but do you have any plans for a "flipbook" visualization?
- bobsingor 1y agoNot on the roadmap yet, but I’d definitely be open to adding it if more people are interested.
- thyristan 1y ago[flagged]
- giancarlostoro 1y agoThat is not even close to what I thought when I saw the logo.
- davorak 1y agoI did not see it either until it was pointed out. I probably would not make the connection again if I saw the logo after a reasonable gap of time. Projects are brought down or are less than they could be other wise because logo choice or name choice though so this case is hard for me to immediately brush it off without doing research/survey/etc, (edit) mostly because I am not familiar with the area.
- Lammy 1y agoAkshully to be a swastika it would have to have four-way rotational symmetry, which this kinda looks like but isn't. The Sun logo is a swastika: https://dogemicrosystems.ca/pub/Sun/media/logos/Sun-Microsystems-purple.svg https://dogemicrosystems.ca/pub/Sun/media/logos/Sun-Microsys... I am also fine with calling things swastikas in a non-judgemental purely-heraldic way. Being a swastika doesn't mean something should be compared unfavorably to that swastika lol <https://commons.wikimedia.org/wiki/Category:Swastikas_in_heraldry https://commons.wikimedia.org/wiki/Category:Swastikas_in_her...>
- thyristan 1y agoIt doesn't matter if it is exact or not. It is a problem that people may think it looks line a swastika. Certain places in Europe, for example Austria and Germany, are far more sensitive in those regards, for obvious historical reasons. You really don't want to be associated even remotely with those kinds of things. Even if the similarity isn't sufficient to land you in jail, it will lead to weird looks, social ostracism, loss of business and jobs, hostile behaviour, and increased attention by the authorities. If you never want to do business or live in central Europe, fine, ignore all that. I know that the rest of the world is more relaxed. But just as USian sensitivities sometimes induce a heated discussion about why a visible nipple isn't actually harmful, this is one of those topics from the European perspective.
- NooZ 1y agoVery nice! Thanks for sharing. How long are you working on that ?
- bobsingor 1y agoThanks! I’ve been working on it for about 7 months now.
- typpilol 1y agoThe mobile site works well. Quite fast and snappy
- bobsingor 1y agoThanks! Glad to hear it’s running smoothly on mobile, the rendering on iOS in particular feels really fast.
- lerp-io 1y agothe best solution is simply to not use PDF.
- stronglikedan 1y agoNitpick, but Viewer is free and always has been. You're building a free alternative to Acrobat.
- wewewedxfgdf 1y agoI'm curious to know why you built this when the Mozilla PDF viewer exists: https://github.com/mozilla/pdf.js https://github.com/mozilla/pdf.js Not criticizing because there's lots of reason to build things that exist, just curious.
- majkinetor 1y agoCursory looks tells me that there are some different features, like annotation comments.
- bobsingor 1y agoThe main goal was to make a PDF viewer that is easy for developers to integrate into their websites with minimal setup, while PDF.js can be harder to customize and extend for certain use cases
- wg0 1y agoOut of curiosity: - Is it written from scratch? - Did you have prior experience with PDF format and rendering? Stupid question: Do you feel LLMs can do that kind of work beyond typical SPAs with forms and CRUD?
- vrzucchini 1y agoFor app integration, the annotations, shapes, and comments are a game changer. Once you need real PDF markup tools, your options are either building them yourself or using a subscription-based PDF editor - neither comes cheap. I know teams that integrated Apryse, and the costs just to support basic PDF editing are eye-watering.
- bobsingor 1y agoYes, those commercial PDF SDKs charge crazy prices! Time to change that.
- mattigames 1y ago402 open issues, mother of God, it's a glimpse of the massive effort that is handling PDFs and all it's features.
- timhigins 1y agoLooks great! Diving into the docs I especially liked the idea of a headless React library so I can design my own UI and add some extra components. How difficult would it be to automatically highlight or underline certain terms in the PDF and then render a custom component when I click or hover over the term?
- bobsingor 1y agoVery easy, this already works! In the AnnotationLayer you can add your own `selectionMenu` and render any custom component there. If you want to dive deeper, join our Discord and shoot me a message. https://discord.gg/mHHABmmuVU https://discord.gg/mHHABmmuVU
- batmya 1y agoThis is amazing. Unlike Acrobat Reader, this actually made me want to read a pdf. And the UI looks super professional.
- bobsingor 1y agoThat means a lot to me, thank you!
- sqrj 1y agoGreat project. Would be wonderful to have PKCS#11 and PKCS#12.
- system7rocks 1y agoThis is really great. The speed is great, and I've had issues with Mozilla PDF viewer recently. (Printing fails for some unknown reason.) But I assumed it was also a standalone app? Could this be used as a standalone app in some fashion?
- bobsingor 1y agoThanks! For now we’re only building a web app, but depending on demand we’d love to build native apps for Android, iOS, and desktop OSs as well.
- dotancohen 1y agoKOReader user here, very happy to try something new. I use annotations very heavily, on a KDE based Debian system, on a Samsung Ultra device with the S-Pen, and with a large E-ink tablet with an EMR stylus. I use many mixed LTR and RTL text. I work with code and with documentation and with scientific articles. If you want a demanding user with diverse use cases to test on diverse devices, you are invited to contact me. My Gmail username is the same as my HN username.
- xyz_suspended 1y ago[dead]
- Semaphor 1y agoWe use pdf.js, a bunch of problems I encountered when testing and comparing (17 MB, 158 pages, many images, Windows): * Links don’t work * Bookmarks show up but don’t work either * Text selection doesn’t work in FF * Middle-clicking (to scroll) in Chrome triggers text selection * Very slow rendering, when I scroll in pdf.js, everything looks fine. When I scroll in this, everything looks low quality and blurry for ~500-1000ms. Worse for jumping multiple pages at once, e.g. using "end", I get a white page instead of a low quality page. * Up/Down, Page Up/Down, Home/End don’t work in FF (left/right does work)
- sylware 1y agoRequiring a whatng cartel web engine? Then, nothing to be proud of, mate. But that's a bravery to deal with the brain damaged PDF file format.
- zastai0day 1y agoThis looks really impressive! I'm curious about the monetization strategy - how do you plan to sustain development of such a feature-rich PDF viewer while keeping it free? Are you considering enterprise features, hosting services, or other revenue streams?
- bobsingor 1y agoYes, all of the above. The client-side PDF viewer will remain free and MIT-licensed, but I’ll be focusing on offering PDF hosting with enterprise features like analytics, access controls etc, those will be part of the paid offering.
- bestspharma 1y ago[dead]
- fransje26 1y agoUnfortunately, the Demo doesn't seem to work with my combination of Linux + Firefox. I cannot get any of the annotation/redaction tools to work. It seems to work with Chromium on the same machine.
- bobsingor 1y agoThanks for letting me know, that was related to a Firefox-specific issue I’ve just fixed. Annotations and redaction should now work in Linux + Firefox as well as Chromium.
- karel-3d 1y agoNote that actual hard work here seems is done by PDFium, which is what Google bought from Foxit and then relicenced (and keep developing themselves), and which is now in Chrome. (I don't take from your work btw, just that it's not a new PDF parser written from scratch or anything.)
- wsc981 1y agoI think it's what many (also commercial) PDF viewers are based on.
- ajot 1y agoSeems to work pretty well on Firefox for Android. Very impressive work!
- bobsingor 1y agoThanks! Glad to hear it’s working well on Firefox for Android.
- teddyh 1y agoI’d much rather recommend <https://pdfreaders.org/ https://pdfreaders.org/>, so people can choose depending on their situation. Does this project belong there, too?
- 0xTJ 1y agoWhat are you recommending? That's a list of other open PDF readers, which mostly serve purposes very different from what the author here has done.
- teddyh 1y agoBy ”recommend”, I meant, “nice link to send to people who want a suitable PDF reader”. As the headline puts it, “a free alternative to Adobe Acrobat PDF viewer”.
- bobsingor 1y agoThanks for sharing! It looks like the pdfreaders campaign has actually ended and the site is no longer updated, so I’m not sure it’s still being maintained as a resource.
- simonebrunozzi 1y agoIf you want traction, I suggest you package a .dmg file for Mac users.
- hulitu 1y ago> Show HN: I built a free alternative to Adobe Acrobat PDF viewer It needs a web browser so no alternative to Adobe PDF viewer.
- sureglymop 1y agoDoes it support editing the embedded outline (annotations)? Probably the number one missing feature of PDF editors/viewers. Miss it everytime someone sends me a PDF without outline.
- bobsingor 1y agoIt doesn’t support editing outlines yet, but it’s definitely possible and something I plan to look into. I don’t think it should be too hard to add.
- sureglymop 1y agoWould be awesome! The only free PDF editor that works on linux to support that currently is PDF4QT. If you accept PRs I'd be happy to contribute too.
- bobsingor 1y agoThat’s great to hear, contributions are very welcome! If you’re interested in working on outline editing, feel free to open a discussion or draft PR and we can figure out the best way to integrate it.
- yukukotani 1y agoNice work! The composable design is really better than something like viewer mode or annotation mode