From 21298359e6fe6eec9a4083f8ed8c23e88338b5ff Mon Sep 17 00:00:00 2001 From: Thomas Felber Date: Fri, 10 Apr 2015 05:23:28 -0700 Subject: added html, css, js --- pdf-as-web/src/main/webapp/assets/css/style.css | 82 ++++++ pdf-as-web/src/main/webapp/assets/img/bg.png | Bin 0 -> 156 bytes .../src/main/webapp/assets/img/signature.png | Bin 0 -> 1015 bytes pdf-as-web/src/main/webapp/assets/js/dragNdrop.js | 112 ++++++++ .../main/webapp/assets/js/jspdf/examples/basic.htm | 201 ++++++++++++++ .../main/webapp/assets/js/jspdf/examples/jaxer.htm | 15 + .../src/main/webapp/assets/js/jspdf/jspdf.js | 304 +++++++++++++++++++++ .../src/main/webapp/assets/js/jspdf/libs/base64.js | 143 ++++++++++ .../main/webapp/assets/js/jspdf/libs/sprintf.js | 152 +++++++++++ pdf-as-web/src/main/webapp/index.jsp | 85 +++++- 10 files changed, 1087 insertions(+), 7 deletions(-) create mode 100644 pdf-as-web/src/main/webapp/assets/css/style.css create mode 100644 pdf-as-web/src/main/webapp/assets/img/bg.png create mode 100644 pdf-as-web/src/main/webapp/assets/img/signature.png create mode 100644 pdf-as-web/src/main/webapp/assets/js/dragNdrop.js create mode 100644 pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm create mode 100644 pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm create mode 100644 pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js create mode 100644 pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js create mode 100644 pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js diff --git a/pdf-as-web/src/main/webapp/assets/css/style.css b/pdf-as-web/src/main/webapp/assets/css/style.css new file mode 100644 index 00000000..8849709f --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/css/style.css @@ -0,0 +1,82 @@ +html { + font-family: Verdana, Geneva, sans-serif; +} + +body { + background-image: url("../img/bg.png"); +} + +footer { + clear: both; +} + +iframe { + border: none; +} + +#leftMain { + float: left; + margin-right: 1em; +} + +#fileSelector { + height: 20em; +} + +#dropzone { + border-bottom: 2px solid; + border-color: #66A3FF; + height: 46%; +} + +#traditionalUpload { + text-align: center; + height: 46%; +} + +#main { + height: 900px; + width: 800px; + float: left; +} + +#content { + clear: both; + height: 868px; + font-size: 150%; +} + +#states { + height: 5%; +} + +.center { + display: flex; + justify-content: center; + align-items: center; +} + +.container { + border-top-left-radius: 15px; + border-top-right-radius: 15px; + border: 2px solid; + border-color: #66A3FF; + background: #E8F4FF; + box-shadow: 0px 0px 15px #333333; + margin-bottom: 1em; + width: 20em; +} + +.container h3 { + border-top-left-radius: 13px; + border-top-right-radius: 13px; + background: #66A3FF; + color: #FFFFFF; + text-align: center; + margin: 0px; + height: 2em; +} + +.container fieldset { + border: none; +} diff --git a/pdf-as-web/src/main/webapp/assets/img/bg.png b/pdf-as-web/src/main/webapp/assets/img/bg.png new file mode 100644 index 00000000..9b594119 Binary files /dev/null and b/pdf-as-web/src/main/webapp/assets/img/bg.png differ diff --git a/pdf-as-web/src/main/webapp/assets/img/signature.png b/pdf-as-web/src/main/webapp/assets/img/signature.png new file mode 100644 index 00000000..a6a854cc Binary files /dev/null and b/pdf-as-web/src/main/webapp/assets/img/signature.png differ diff --git a/pdf-as-web/src/main/webapp/assets/js/dragNdrop.js b/pdf-as-web/src/main/webapp/assets/js/dragNdrop.js new file mode 100644 index 00000000..040b61d0 --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/dragNdrop.js @@ -0,0 +1,112 @@ + +$(document).ready(function() { + registerEventListeners(); +}); + +function registerEventListeners() { + $(document).bind("dragover", function(evt) { + evt.preventDefault(); + }); + + $(document).bind("drop", function(evt) { + evt.preventDefault(); + }); + + $("#dropzone").bind("dragenter", function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + highlightDropzone(); + }); + + $("#dropzone").bind("dragover", function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + }); + + $("#dropzone").bind("dragleave", function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + unhighlightDropzone(); + }); + + $("#dropzone").bind("dragend", function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + unhighlightDropzone(); + }); + + $("#dropzone").bind("drop", function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + unhighlightDropzone(); + + var files = evt.originalEvent.dataTransfer.files; + if(files == null) { + return; + } + + previewFile(files[0]); + }); +} + +function previewFile(file) { + var fr = new FileReader(); + + fr.onload = function(file) { + var buffer = fr.result; + /*var int8View = new Uint8Array(buffer); + var output = document.getElementById("output"); + output.innerHTML = + int8View[0].toString(16) + + int8View[1].toString(16) + + int8View[2].toString(16) + + int8View[3].toString(16);*/ + displaypdf(buffer); + }; + + clearContentDiv(); + fr.readAsDataURL(file); +} + +function sign() { + /*var fd = new FormData(); + fd.append("pdf-file", files[0]); + fd.append("source", "internal"); + fd.append("connector", "mobilebku"); + + $.ajax({ + url: "Sign", + data: fd, + processData: false, + contentType: false, + type: "POST", + success: function(response) { + $("html").empty(); + $("html").html(response); + } + });*/ +} + +function highlightDropzone() { + $("#dropzone").css("background", "#D8FFD8"); +} + +function unhighlightDropzone() { + $("#dropzone").css("background", "#E8F4FF"); +} + +function displaypdf(datauri) { + $("#content").append("Signature"); + $("#content").append(""); + + $("#signature").draggable({ + drag: function() { + + }, + containment: "parent" + }); +} + +function clearContentDiv() { + $("#content").empty(); +} diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm new file mode 100644 index 00000000..dea59adf --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm @@ -0,0 +1,201 @@ + + + + jsPDF + + + + + + + + +

jsPDF Demos

+ +

Examples for using jsPDF with Data URIs below. Go back to project homepage.

+ +

Simple Two-page Text Document

+
var doc = new jsPDF();
+doc.text(20, 20, 'Hello world!');
+doc.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
+doc.addPage();
+doc.text(20, 20, 'Do you like that?');
+
+// Output as Data URI
+doc.output('datauri');
+Run Code + +

Different font sizes

+
var doc = new jsPDF();
+doc.setFontSize(22);
+doc.text(20, 20, 'This is a title');
+
+doc.setFontSize(16);
+doc.text(20, 30, 'This is some normal sized text underneath.');	
+
+// Output as Data URI
+doc.output('datauri');
+Run Code + + +

Adding metadata

+
var doc = new jsPDF();
+doc.text(20, 20, 'This PDF has a title, subject, author, keywords and a creator.');
+
+// Optional - set properties on the document
+doc.setProperties({
+	title: 'Title',
+	subject: 'This is the subject',		
+	author: 'James Hall',
+	keywords: 'generated, javascript, web 2.0, ajax',
+	creator: 'MEEE'
+});
+
+// Output as Data URI
+doc.output('datauri');
+Run Code + + +

Example of user input

+
var name = prompt('What is your name?');
+var multiplier = prompt('Enter a number:');
+multiplier = parseInt(multiplier);
+
+var doc = new jsPDF();
+doc.setFontSize(22);	
+doc.text(20, 20, 'Questions');
+doc.setFontSize(16);
+doc.text(20, 30, 'This belongs to: ' + name);
+
+for(var i = 1; i <= 12; i ++) {
+	doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ___');
+}
+
+doc.addPage();
+doc.setFontSize(22);
+doc.text(20, 20, 'Answers');
+doc.setFontSize(16);
+
+for(var i = 1; i <= 12; i ++) {
+	doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ' + (i * multiplier));
+}	
+doc.output('datauri');
+Run Code + + + + + + + + + + \ No newline at end of file diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm new file mode 100644 index 00000000..fff93e9b --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm @@ -0,0 +1,15 @@ + + + + diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js new file mode 100644 index 00000000..e4d2d6fc --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js @@ -0,0 +1,304 @@ + +/** + * jsPDF + * (c) 2009 James Hall + * + * Some parts based on FPDF. + */ + +var jsPDF = function(){ + + // Private properties + var version = '20090504'; + var buffer = ''; + + var pdfVersion = '1.3'; // PDF Version + var defaultPageFormat = 'a4'; + var pageFormats = { // Size in mm of various paper formats + 'a3': [841.89, 1190.55], + 'a4': [595.28, 841.89], + 'a5': [420.94, 595.28], + 'letter': [612, 792], + 'legal': [612, 1008] + }; + var textColor = '0 g'; + var page = 0; + var objectNumber = 2; // 'n' Current object number + var state = 0; // Current document state + var pages = new Array(); + var offsets = new Array(); // List of offsets + var lineWidth = 0.200025; // 2mm + var pageHeight; + var k; // Scale factor + var unit = 'mm'; // Default to mm for units + var fontNumber; // TODO: This is temp, replace with real font handling + var documentProperties = {}; + var fontSize = 16; // Default font size + var pageFontSize = 16; + + // Initilisation + if (unit == 'pt') { + k = 1; + } else if(unit == 'mm') { + k = 72/25.4; + } else if(unit == 'cm') { + k = 72/2.54; + } else if(unit == 'in') { + k = 72; + } + + // Private functions + var newObject = function() { + //Begin a new object + objectNumber ++; + offsets[objectNumber] = buffer.length; + out(objectNumber + ' 0 obj'); + } + + + var putHeader = function() { + out('%PDF-' + pdfVersion); + } + + var putPages = function() { + + // TODO: Fix, hardcoded to a4 portrait + var wPt = pageWidth * k; + var hPt = pageHeight * k; + + for(n=1; n <= page; n++) { + newObject(); + out('<>'); + out('endobj'); + + //Page content + p = pages[n]; + newObject(); + out('<>'); + putStream(p); + out('endobj'); + } + offsets[1] = buffer.length; + out('1 0 obj'); + out('<>'); + out('endobj'); + } + + var putStream = function(str) { + out('stream'); + out(str); + out('endstream'); + } + + var putResources = function() { + putFonts(); + putImages(); + + //Resource dictionary + offsets[2] = buffer.length; + out('2 0 obj'); + out('<<'); + putResourceDictionary(); + out('>>'); + out('endobj'); + } + + var putFonts = function() { + // TODO: Only supports core font hardcoded to Helvetica + newObject(); + fontNumber = objectNumber; + name = 'Helvetica'; + out('<>'); + out('endobj'); + } + + var putImages = function() { + // TODO + } + + var putResourceDictionary = function() { + out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + out('/Font <<'); + // Do this for each font, the '1' bit is the index of the font + // fontNumber is currently the object number related to 'putFonts' + out('/F1 ' + fontNumber + ' 0 R'); + out('>>'); + out('/XObject <<'); + putXobjectDict(); + out('>>'); + } + + var putXobjectDict = function() { + // TODO + // Loop through images + } + + + var putInfo = function() { + out('/Producer (jsPDF ' + version + ')'); + if(documentProperties.title != undefined) { + out('/Title (' + pdfEscape(documentProperties.title) + ')'); + } + if(documentProperties.subject != undefined) { + out('/Subject (' + pdfEscape(documentProperties.subject) + ')'); + } + if(documentProperties.author != undefined) { + out('/Author (' + pdfEscape(documentProperties.author) + ')'); + } + if(documentProperties.keywords != undefined) { + out('/Keywords (' + pdfEscape(documentProperties.keywords) + ')'); + } + if(documentProperties.creator != undefined) { + out('/Creator (' + pdfEscape(documentProperties.creator) + ')'); + } + var created = new Date(); + var year = created.getFullYear(); + var month = (created.getMonth() + 1); + var day = created.getDate(); + var hour = created.getHours(); + var minute = created.getMinutes(); + var second = created.getSeconds(); + out('/CreationDate (D:' + sprintf('%02d%02d%02d%02d%02d%02d', year, month, day, hour, minute, second) + ')'); + } + + var putCatalog = function () { + out('/Type /Catalog'); + out('/Pages 1 0 R'); + // TODO: Add zoom and layout modes + out('/OpenAction [3 0 R /FitH null]'); + out('/PageLayout /OneColumn'); + } + + function putTrailer() { + out('/Size ' + (objectNumber + 1)); + out('/Root ' + objectNumber + ' 0 R'); + out('/Info ' + (objectNumber - 1) + ' 0 R'); + } + + var endDocument = function() { + state = 1; + putHeader(); + putPages(); + + putResources(); + //Info + newObject(); + out('<<'); + putInfo(); + out('>>'); + out('endobj'); + + //Catalog + newObject(); + out('<<'); + putCatalog(); + out('>>'); + out('endobj'); + + //Cross-ref + var o = buffer.length; + out('xref'); + out('0 ' + (objectNumber + 1)); + out('0000000000 65535 f '); + for (var i=1; i <= objectNumber; i++) { + out(sprintf('%010d 00000 n ', offsets[i])); + } + //Trailer + out('trailer'); + out('<<'); + putTrailer(); + out('>>'); + out('startxref'); + out(o); + out('%%EOF'); + state = 3; + } + + var beginPage = function() { + page ++; + // Do dimension stuff + state = 2; + pages[page] = ''; + + // TODO: Hardcoded at A4 and portrait + pageHeight = pageFormats['a4'][1] / k; + pageWidth = pageFormats['a4'][0] / k; + } + + var out = function(string) { + if(state == 2) { + pages[page] += string + '\n'; + } else { + buffer += string + '\n'; + } + } + + var _addPage = function() { + beginPage(); + // Set line width + out(sprintf('%.2f w', (lineWidth * k))); + + // Set font - TODO + // 16 is the font size + pageFontSize = fontSize; + out('BT /F1 ' + parseInt(fontSize) + '.00 Tf ET'); + } + + // Add the first page automatically + _addPage(); + + // Escape text + var pdfEscape = function(text) { + return text.replace(/\\/g, '\\\\').replace(/\(/g, '\\(').replace(/\)/g, '\\)'); + } + + return { + addPage: function() { + _addPage(); + }, + text: function(x, y, text) { + // need page height + if(pageFontSize != fontSize) { + out('BT /F1 ' + parseInt(fontSize) + '.00 Tf ET'); + pageFontSize = fontSize; + } + var str = sprintf('BT %.2f %.2f Td (%s) Tj ET', x * k, (pageHeight - y) * k, pdfEscape(text)); + out(str); + }, + setProperties: function(properties) { + documentProperties = properties; + }, + addImage: function(imageData, format, x, y, w, h) { + + }, + output: function(type, options) { + endDocument(); + if(type == undefined) { + return buffer; + } + if(type == 'datauri') { + document.location.href = 'data:application/pdf;base64,' + Base64.encode(buffer); + } + // @TODO: Add different output options + }, + setFontSize: function(size) { + fontSize = size; + } + } + +}; \ No newline at end of file diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js new file mode 100644 index 00000000..7d9536a4 --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js @@ -0,0 +1,143 @@ + +/** +* +* Base64 encode / decode +* http://www.webtoolkit.info/ +* +**/ + +var Base64 = { + + // private property + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + + // public method for encoding + encode : function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + + } + + return output; + }, + + // public method for decoding + decode : function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + output = Base64._utf8_decode(output); + + return output; + + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +} diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js new file mode 100644 index 00000000..1af7bdf6 --- /dev/null +++ b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js @@ -0,0 +1,152 @@ + + +function sprintf( ) { + // Return a formatted string + // + // version: 903.3016 + // discuss at: http://phpjs.org/functions/sprintf + // + original by: Ash Searle (http://hexmen.com/blog/) + // + namespaced by: Michael White (http://getsprink.com) + // + tweaked by: Jack + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Paulo Ricardo F. Santos + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brettz9.blogspot.com) + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: sprintf("%01.2f", 123.1); + // * returns 1: 123.10 + // * example 2: sprintf("[%10s]", 'monkey'); + // * returns 2: '[ monkey]' + // * example 3: sprintf("[%'#10s]", 'monkey'); + // * returns 3: '[####monkey]' + var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g; + var a = arguments, i = 0, format = a[i++]; + + // pad() + var pad = function(str, len, chr, leftJustify) { + if (!chr) chr = ' '; + var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); + return leftJustify ? str + padding : padding + str; + }; + + // justify() + var justify = function(value, prefix, leftJustify, minWidth, zeroPad, customPadChar) { + var diff = minWidth - value.length; + if (diff > 0) { + if (leftJustify || !zeroPad) { + value = pad(value, minWidth, customPadChar, leftJustify); + } else { + value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); + } + } + return value; + }; + + // formatBaseX() + var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) { + // Note: casts negative numbers to positive ones + var number = value >>> 0; + prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; + value = prefix + pad(number.toString(base), precision || 0, '0', false); + return justify(value, prefix, leftJustify, minWidth, zeroPad); + }; + + // formatString() + var formatString = function(value, leftJustify, minWidth, precision, zeroPad, customPadChar) { + if (precision != null) { + value = value.slice(0, precision); + } + return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar); + }; + + // doFormat() + var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) { + var number; + var prefix; + var method; + var textTransform; + var value; + + if (substring == '%%') return '%'; + + // parse flags + var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, customPadChar = ' '; + var flagsl = flags.length; + for (var j = 0; flags && j < flagsl; j++) switch (flags.charAt(j)) { + case ' ': positivePrefix = ' '; break; + case '+': positivePrefix = '+'; break; + case '-': leftJustify = true; break; + case "'": customPadChar = flags.charAt(j+1); break; + case '0': zeroPad = true; break; + case '#': prefixBaseX = true; break; + } + + // parameters may be null, undefined, empty-string or real valued + // we want to ignore null, undefined and empty-string values + if (!minWidth) { + minWidth = 0; + } else if (minWidth == '*') { + minWidth = +a[i++]; + } else if (minWidth.charAt(0) == '*') { + minWidth = +a[minWidth.slice(1, -1)]; + } else { + minWidth = +minWidth; + } + + // Note: undocumented perl feature: + if (minWidth < 0) { + minWidth = -minWidth; + leftJustify = true; + } + + if (!isFinite(minWidth)) { + throw new Error('sprintf: (minimum-)width must be finite'); + } + + if (!precision) { + precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0); + } else if (precision == '*') { + precision = +a[i++]; + } else if (precision.charAt(0) == '*') { + precision = +a[precision.slice(1, -1)]; + } else { + precision = +precision; + } + + // grab value using valueIndex if required? + value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; + + switch (type) { + case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar); + case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad); + case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad); + case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad); + case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad); + case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase(); + case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad); + case 'i': + case 'd': { + number = parseInt(+value); + prefix = number < 0 ? '-' : positivePrefix; + value = prefix + pad(String(Math.abs(number)), precision, '0', false); + return justify(value, prefix, leftJustify, minWidth, zeroPad); + } + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': { + number = +value; + prefix = number < 0 ? '-' : positivePrefix; + method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; + textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; + value = prefix + Math.abs(number)[method](precision); + return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform](); + } + default: return substring; + } + }; + + return format.replace(regex, doFormat); +} diff --git a/pdf-as-web/src/main/webapp/index.jsp b/pdf-as-web/src/main/webapp/index.jsp index f3a3b957..0c35bc52 100644 --- a/pdf-as-web/src/main/webapp/index.jsp +++ b/pdf-as-web/src/main/webapp/index.jsp @@ -1,14 +1,82 @@ <%@page import="at.gv.egiz.pdfas.web.config.WebConfiguration"%> <%@page import="at.gv.egiz.pdfas.web.helper.PdfAsHelper"%> + -PDF-Signatur + + PDF-Signatur + + + + + -
+

header

+ + +
+ +
+

File Selector

+
+ Drag and Drop your Document here ... +
+
+

... or select File here

+ +
+
+ +
+

Sign Method

+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+

Language

+
+
+
+
+
+
+ + +
+

Preview

+
+ Please select the pdf file you want to sign! +
+
+ + + \ No newline at end of file -- cgit v1.2.3