/* PDFObject v1.2.20111123 https://github.com/pipwerks/PDFObject Copyright (c) Philip Hutchison MIT-style license: http://pipwerks.mit-license.org/ */ /*jslint browser: true, sloppy: true, white: true, plusplus: true */ /*global ActiveXObject, window */ var PDFObject = function (obj){ if(!obj || !obj.url){ return false; } var pdfobjectversion = "1.2", //Set reasonable defaults id = obj.id || false, width = obj.width || "100%", height = obj.height || "100%", pdfOpenParams = obj.pdfOpenParams, url, pluginTypeFound, //declare functions createAXO, hasReaderActiveX, hasReader, hasGeneric, pluginFound, setCssForFullWindowPdf, buildQueryString, get, embed; /* ---------------------------------------------------- Supporting functions ---------------------------------------------------- */ createAXO = function (type){ var ax; try { ax = new ActiveXObject(type); } catch (e) { //ensure ax remains null ax = null; } return ax; }; //Tests specifically for Adobe Reader (aka Acrobat) in Internet Explorer hasReaderActiveX = function (){ var axObj = null; try { axObj = new ActiveXObject("AcroPDF.PDF"); } catch (e) { // Adobe installed } if (axObj != null || window.ActiveXObject) { axObj = createAXO("AcroPDF.PDF"); //If "AcroPDF.PDF" didn't work, try "PDF.PdfCtrl" if(!axObj){ axObj = createAXO("PDF.PdfCtrl"); } //If either "AcroPDF.PDF" or "PDF.PdfCtrl" are found, return true if (axObj !== null) { return true; } } //If you got to this point, there's no ActiveXObject for PDFs return false; }; //Tests specifically for Adobe Reader (aka Adobe Acrobat) in non-IE browsers hasReader = function (){ var i, n = navigator.plugins, count = n.length, regx = /Adobe Reader|Adobe PDF|Acrobat/gi; for(i=0; i<count; i++){ if(regx.test(n[i].name)){ return true; } } return false; }; //Detects unbranded PDF support hasGeneric = function (){ var plugin = navigator.mimeTypes["application/pdf"]; return (plugin && plugin.enabledPlugin); }; //Determines what kind of PDF support is available: Adobe or generic pluginFound = function (){ var type = null; if(hasReader() || hasReaderActiveX()){ type = "Adobe"; } else if(hasGeneric()) { type = "generic"; } return type; }; //If setting PDF to fill page, need to handle some CSS first setCssForFullWindowPdf = function (){ var html = document.getElementsByTagName("html"), html_style, body_style; if(!html){ return false; } html_style = html[0].style; body_style = document.body.style; html_style.height = "100%"; html_style.overflow = "hidden"; body_style.margin = "0"; body_style.padding = "0"; body_style.height = "100%"; body_style.overflow = "hidden"; }; //Creating a querystring for using PDF Open parameters when embedding PDF buildQueryString = function(pdfParams){ var string = "", prop; if(!pdfParams){ return string; } for (prop in pdfParams) { if (pdfParams.hasOwnProperty(prop)) { string += prop + "="; if(prop === "search") { string += encodeURI(pdfParams[prop]); } else { string += pdfParams[prop]; } string += "&"; } } //Remove last ampersand return string.slice(0, string.length - 1); }; //Simple function for returning values from PDFObject get = function(prop){ var value = null; switch(prop){ case "url" : value = url; break; case "id" : value = id; break; case "width" : value = width; break; case "height" : value = height; break; case "pdfOpenParams" : value = pdfOpenParams; break; case "pluginTypeFound" : value = pluginTypeFound; break; case "pdfobjectversion" : value = pdfobjectversion; break; } return value; }; /* ---------------------------------------------------- PDF Embedding functions ---------------------------------------------------- */ embed = function(targetID){ if(!pluginTypeFound){ return false; } var targetNode = null; if(targetID){ //Allow users to pass an element OR an element's ID targetNode = (targetID.nodeType && targetID.nodeType === 1) ? targetID : document.getElementById(targetID); //Ensure target element is found in document before continuing if(!targetNode){ return false; } } else { targetNode = document.body; setCssForFullWindowPdf(); width = "100%"; height = "100%"; } targetNode.innerHTML = '<object data="' +url +'" type="application/pdf" width="' +width +'" height="' +height +'"></object>'; return targetNode.getElementsByTagName("object")[0]; }; //The hash (#) prevents odd behavior in Windows //Append optional Adobe params for opening document url = encodeURI(obj.url) + "#" + buildQueryString(pdfOpenParams); pluginTypeFound = pluginFound(); this.get = function(prop){ return get(prop); }; this.embed = function(id){ return embed(id); }; this.pdfobjectversion = pdfobjectversion; return this; };