/** * jsPDF PDF Test Harness * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv * * Licensed under the MIT License. * http://opensource.org/licenses/mit-license */ /** * An easy way to view PDF and PDF source code side by side. */ pdf_test_harness_init = function(pdf, message) { var harness = new pdf_test_harness(); var body = document.getElementsByTagName('body')[0]; body.style.display = 'flex'; var div = document.createElement('div'); div.setAttribute('style', 'position:fixed;height:20px;left:0;right:0;background:lightblue'); body.appendChild(div); harness.header = div; var div2 = document.createElement('div'); div2.setAttribute('style', 'position:fixed;display:flex;top:20px; bottom:0;left:0;right:0'); body.appendChild(div2); harness.body = div2; var btn1 = document.createElement('input'); btn1.setAttribute('type', 'radio'); btn1.setAttribute('name', 'view'); div.appendChild(btn1); btn1.checked = true; var lbl1 = document.createElement('label'); lbl1.setAttribute('for', 'btn1'); lbl1.innerHTML = 'PDF' div.appendChild(lbl1); var btn2 = document.createElement('input'); btn2.setAttribute('type', 'radio'); btn2.setAttribute('name', 'view'); div.appendChild(btn2); var lbl2 = document.createElement('label'); lbl2.setAttribute('for', 'btn2'); lbl2.innerHTML = 'Source' div.appendChild(lbl2); var btn3 = document.createElement('input'); btn3.setAttribute('type', 'radio'); btn3.setAttribute('name', 'view'); div.appendChild(btn3); var lbl3 = document.createElement('label'); lbl3.setAttribute('for', 'btn3'); lbl3.innerHTML = 'Both' div.appendChild(lbl3); harness.source = document.createElement('pre'); harness.source.setAttribute('style', 'margin-top:0;width:100%;height:100%;position:absolute;top:0px;bottom:0px;overflow:auto'); div2.appendChild(harness.source); harness.iframe = document.createElement('iframe'); harness.iframe.setAttribute('style', 'width:100%;height:100%;position:absolute;overflow:auto;top:0px;bottom:0px'); div2.appendChild(harness.iframe); //if (pdf_test_harness.onload) { //harness.pdf = pdf_test_harness.onload(harness); if (message) { message += "
click to close
"; var popup = document.createElement('div'); popup.setAttribute('style', 'z-index:100;margin:100px auto;cursor:pointer;font-size:1.3em;top:50px;background-color:rgb(243, 224, 141);padding:1em;border:1px solid black'); popup.innerHTML = message; body.appendChild(popup); popup.onclick = function() { popup.parentNode.removeChild(popup); } } //} harness.pdf = pdf; harness.render('pdf'); btn1.onclick = function() { harness.render('pdf'); } btn2.onclick = function() { harness.render('source'); } btn3.onclick = function() { harness.render('both'); } return harness; } pdf_test_harness = function(pdf) { this.pdf = pdf; this.onload = undefined; this.iframe = undefined; this.entityMap = { "&" : "&", "<" : "<", ">" : ">", '"' : '"', "'" : ''', "/" : '/' }; this.escapeHtml = function(string) { return String(string).replace(/[&<>"'\/]/g, function(s) { return this.entityMap[s]; }.bind(this)); }; this.getParameterByName = function(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }; this.setPdf = function(pdf) { this.pdf = pdf; this.rendered = undefined; this.render(this.view); }; // generate the pdf, the source code, or both this.render = function(view) { this.view = view; //Current code only lets us render one time. if (!this.rendered) { this.rendered = this.pdf.output('datauristring'); this.iframe.src = this.rendered; var raw = this.pdf.output(); raw = this.escapeHtml(raw); this.source.innerHTML = raw; } if ('pdf' === view) { this.source.style.display = 'none'; this.iframe.style.display = 'block'; this.iframe.style.width = '100%'; } else if ('source' === view) { this.iframe.style.display = 'none'; this.source.style.display = 'block'; this.source.style.width = '100%'; } if ('both' === view) { raw = this.escapeHtml(raw); this.iframe.style.width = '50%'; this.iframe.style.position = 'relative'; this.iframe.style.display = 'inline-block'; this.source.style.width = '50%'; this.source.style.position = 'relative'; this.source.style.display = 'inline-block'; } } }