PDFObject 2.0 released

After almost eight years in the making (and nearly 7 years of procrastinating), PDFObject 2.0 has arrived.

PDFObject is an open-source standards-friendly JavaScript utility for embedding PDF files into HTML documents. It’s like SWFObject, but for PDFs.

Version 1.0 was released in 2008 and has enjoyed modest success. Based on stats from PDFObject.com (including devious hot-linkers) and integration with 3rd-party products, I’m guesstimating it has been used on well over a million web pages. (If I had a nickel for every time it was used…)

I updated it a few times over the years, but generally only if someone reported a compatibility issue. Like an old beat-up car, it was a bit crusty, but still ran like a champ. That is, it ran like a champ until the rules of the game were changed — when Microsoft changed their ActiveX strategy in Internet Explorer 10-11 and Microsoft Edge, PDFObject’s checks for ActiveX began to fail, rendering PDFObject useless in those browsers. This marked the beginning of the end for PDFObject 1.x.

An update was overdue, yet I let it sit for a couple of years – I fully admit that kids, my job, and life tend to take precedence over an unfunded open-source project. But I never stopped thinking about PDFObject. I intentionally kept it at arm’s length for a while; I was fascinated by changes in the front-end development world, and waited to see how things would shake out.

It’s incredible how much has changed since 2008. For starters, the browser landscape has completely changed. Chrome, which didn’t exist when PDFObject was first released, now rules the land. It also happens to include built-in PDF support. PDF.js was invented, and eventually became Firefox’s default PDF rendering engine. Safari renders PDFs natively using Preview. iOS and Android exploded onto the scene, as did Node.js and NPM. Conversely, Adobe Reader’s market share took a nosedive thanks to browser vendors making Adobe Reader less relevant, not to mention disdain for Adobe Reader’s bloat and security holes. And, of course, HTML5 is now official, which means the <embed> element is officially sanctioned.

PDFObject 2.0 is a complete rewrite that tries to take all of this into consideration. It supports PDF.js. It’s packaged for NPM. It uses the <embed> element instead of the <object> element (not going to rename it to PDFEmbed though). It doesn’t pollute the global space and uses modern JavaScript conventions. It supports all CSS selectors, not just IDs. If you’re feeling frisky, you can even pass a jQuery element instead of a CSS selector (note: PDFObject does not require jQuery). Lots of little changes, which I hope add up to a better experience, wider compatibility, and lots of flexibility.

If you’d like to learn more about PDFObject 2.0, please visit the official site (completely redesigned as well), with examples, documentation and a code generator: http://pdfobject.com

The code is up on GitHub, and has been posted to npm.

PDFObject Updated, Moved to GitHub

PDFObject is a JavaScript utility I created in 2008 to embed PDFs in HTML documents. It was modeled on SWFObject.

Three years have passed since PDFObject 1.0 was released, and the browser landscape has changed dramatically. I figured it’s time to dust off PDFObject and see if it can be improved and/or updated for today’s browsers.

I’ve placed a modified edition of PDFObject (version 1.1) on GitHub as an open-source project, allowing anyone to create a fork and make modifications. There are also a handful of example/test HTML files there, too. I could use some help testing the examples in different OS/browser combinations, and with different PDF plugins.

If you have suggestions for improvements, or have a few minutes to test PDFObject examples in your browser/OS of choice, I’d be grateful to hear from you. Just leave a comment below, or send me a message on twitter. So far I’ve only performed some cursory tests in Firefox 3.6 in OSX 10.6.6, but everything seems to work as expected.

https://github.com/pipwerks/PDFObject

I plan to update PDFObject.com soon, too.

Viewing PDFs in a Browser on a Mac

As a Mac user, one of the more annoying issues I frequently encounter is funky PDF handling in Firefox and Safari. For instance:

  • Adobe doesn’t make a version of Adobe Reader that’s compatible with Firefox on Mac OS X
  • Adobe Reader is only supported in 32-bit versions of Safari on OS X (Snow Leopard ships with a 64-bit version of Safari)
  • Safari has built-in handling of PDFs, but if Adobe Reader is installed — whether it’s actually working in Safari or not — it will turn off Safari’s native PDF handling by default.

Here are some things you can do to get PDFs to display in your browser(s).

Restore Safari’s built-in PDF handling

If your Safari browser isn’t using OS X’s native PDF handling, Adobe Reader may be overriding it. Here’s how to fix it:

  1. Launch Adobe Reader
  2. Go to Preferences > Internet
  3. Deselect “Display PDF in browser using…”
  4. Click OK

Enable PDF support in Firefox

Mozilla has a handy reference for this topic.  Here’s what they say:

Adobe does not yet maintain a plugin for viewing PDF files within Firefox for computers with Mac OS X. To view PDFs in Firefox:

I’ve installed the Firefox PDF Plugin on my Mac (Firefox 3.6), and it works great. It uses the Mac’s built-in PDF handling, so it’s a very small plugin runs very quick.

Caveats and an editorial

Using the Mac’s built-in PDF support means you won’t be able to take advantage of some of Adobe Reader’s new features, such as scripting, portfolios, and SWF support.

I don’t know about you, but I prefer to use the PDF format for its traditional purpose: reading print-based documents online.  Plus, Adobe Reader currently requires 290MB of space on the hard drive. I can live without the new features and would prefer to use my 290MB of space for other things.

In general, I recommend avoiding Adobe Reader on a Mac because of its poor support in Firefox and Safari, its incredible bloat, and the seemingly daily announcements of major security vulnerabilities. Most of the security issues have been directly related to the scripting functionality and other new features. If a lite version of Adobe Reader were offered — one that removes the bloat, eschews these new features, and simply lets us view standard PDF documents — I’d be more than happy to use it.

Shameless plug

Need to embed a PDF in an HTML page? Try PDFObject. It’s free, tiny, and works much like SWFObject (the two projects are unrelated).

Introducing PDFObject

Update March 2011: PDFObject source code has been updated and moved to GitHub.

I recently worked on an e-learning course that required embedding some PDFs into an HTML file. PDF embedding piqued my curiosity, and has become something of a pet project. It sounds simpler than it is. No, scratch that… it is pretty simple. Stoopid simple. The problem is that there’s a lot of bad info about embedding PDFs floating around the www, especially regarding using the embed element.

Note to readers: embed bad, object good.

Unlike embedding SWFs, embedding a PDF is a breeze if you use the object element, and the object element has the added bonus of being totally standards-compliant.

As I tinkered on my new pet project, I decided it would be nice to have a JavaScript script that could dynamically embed PDFs as easily as SWFObject allows SWF embedding. I managed to whip up a script, and decided to name it PDFObject. (I know, I know… what a creative name!) As you may have inferred from the name, the concept and functionality is pretty similar to SWFObject. Like SWFObject, it’s also standards-friendly, and uses DOM scripting techniques to write a standard object element to the page.

One of the perks of using this script is that it makes working with PDF Open parameters much easier, similar to how SWFObject makes working with flashvars easier.

I’ve built a simple website for my PDFObject project named — drumroll, please — http://pdfobject.com. The most time-consuming part of this project has actually been building the website; it includes instructions, a ton of examples, and a compatibility table detailing results from browser/OS testing, including Mac OS X 10.5, Win XP, Vista, and Ubuntu. The site also features a section devoted to PDF embedding using standard HTML code without JavaScript (gotta promote standards!), and a handy code generator that makes writing the code as easy as filling out a form.

The site purposely does not include support or contact information; while I enjoy making things that help people out, I already know I don’t have the time to handle support issues. Sorry!

Anyway, PDFObject is completely free (as-is, no warranties) and my gift to the community. I hope some of you find it useful. 🙂