123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /**
- * 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 += "<p style='text-align:center;font-style:italic;font-size:.8em'>click to close</p>";
- 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';
- }
- }
- }
|