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. 🙂

18 Replies to “Introducing PDFObject”

  1. Nice! Never thought about doing that kind of thing before, and it’s given me some good ideas for some problems I’ve had in the past.

    Thanks a lot!

  2. The big rectangle near the top of the PDFobject website is blank. I suppose something should be there. I’m using IE6 on Win 2000

  3. I am not sure if this is a bug of Adobe Reader 9.x or Firefox’s.
    Even if I uncheck “Display PDF in Browser” in Adobe Reader 9.x,
    navigator.plugins does not change at all.
    Therefore your pdfobject does not work as expected in this case.
    PDF files are not embedded, but instead they display in Adobe Reader proper.
    In that sense detection fails somehow.

    Pluginreg.dat in Firefox’s profile folder does not change itself even if I uncheck “Display PDF in Browser” in Adobe Reader 9. This is not the case in Adobe Reader 8.

    Do you have any idea?

  4. Hi,

    First off all thank you for the great library. Secondly I’ve run into a small problem using the library on WinXp/IE6 without an Acrobat Reader installed.

    I get a Javascript error on: a=new ActiveXObject(“AcroPDF.PDF”). After installing Acrobat Reader the problem disappeared. Since I’m using the code to first do detection of a plugin this is a little bit inconvenient.

    I was wondering if there’s a way to fix this? A try/catch could maybe work?

  5. @tomo @jan thanks for the feedback, i’ll dust off the codebase and do some additional testing when i can find time

    @ell as far as i know, PDFs cannot be rendered natively in a canvas element

  6. Great Job! But, it doesn’t seem to detect Safari’s built-in PDF support. Not even your sample PDF on the front-page of http://pdfobject.com seem to render when tested from Safari 4.0 on Mac OS X 10.6.3. Not sure how it is in Safari 5.0/10.6.4 – I have not upgraded yet.

  7. @Shanto you’re right, it appears Apple changed Safari’s PDF handling. This will require some research and will probably require edits to the PDFObject script. Thanks for the tip.

  8. Hi Philip,

    Thanks for the wonderful library. I ran into a problem while trying to integrate PDFObject with our application.

    We have a servletURL which will return the PDF which has JavaScript embedded in it. When we open the PDF, javascript embedded in the PDF should get executed automatically. For creating a PDFObject, I pass this servletURL as value for URL. I found that JavaScript is not getting executed when we open PDF within PDF object.

    Also is there a plan for fixing these below issues specified in the PDFObject website in near future:
    # Crashes/hanging when trying to replace an embedded PDF with a second PDF (by replacing the first element with a new ).
    # Crashes/hanging when attempting to embed more than one PDF on a single HTML page (FYI this behavior can be avoided by using iframes).

  9. @Mamatha thanks

    without seeing your servletURL, i can’t really give any advice.

    RE the outstanding issues: those particular issues are not due to my script, they’re due to the browser’s PDF handling and/or adobe acrobat. from what i can tell, there’s nothing anyone can do about them (at least not with JavaScript). i haven’t tested with the latest versions of acrobat, firefox, safari, chrome, etc., so it’s possible the browser vendors and/or adobe have already addressed some of these glitches.

    as for updating PDFObject, it’s on my to-do list, but isn’t a very high priority at the moment.

  10. I spend TWO DAYS trying to get PDFs to embed and be able to delay loading. Either it would in some browsers and not others OR they would work intermittently. FRUSTRATING to say the least!

    If you have a PayPal account I would personally like to buy you a beer. Strike that! A six pack! Just email me the info.

    This is for a totally rewritten site for a non-profit Scottish Clan called Clan Lindsay. In about a month or two you will be able to the results at Clan Lindsay USA.

    Thank YOU!
    -Robert

    Thanks Again!

Leave a Reply

Your email address will not be published. Required fields are marked *