InlinePDF

Renders a PDF from string

by Noseratio

HTML

<input type="button" onclick="runit()" value="runit">

	<!-- http://en.wikipedia.org/wiki/Data_URI_scheme -->
	<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
	AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
	9TXL0Y4OHwAAAABJRU5ErkJggg=="/>

	<br>
	<textarea id="textContainer" style="width: 400px; height: 240px"></textarea>
	<br>
	<div id="pdfContainer"></div>

<script id="pdfSource" type="text/plain">
%PDF-1.7

1 0 obj  % entry point
<<
	/Type /Catalog
	/Pages 2 0 R
>>
endobj

2 0 obj
<<
	/Type /Pages
	/MediaBox [ 0 0 200 200 ]
	/Count 1
	/Kids [ 3 0 R ]
>>
endobj

3 0 obj
<<
	/Type /Page
	/Parent 2 0 R
	/Resources <<
	/Font <<
		/F1 4 0 R 
	>>
	>>
	/Contents 5 0 R
>>
endobj

4 0 obj
<<
	/Type /Font
	/Subtype /Type1
	/BaseFont /Times-Roman
>>
endobj

5 0 obj  % page content
<<
	/Length 44
>>
stream
BT
70 50 TD
/F1 12 Tf
(Hello, world!) Tj
ET
endstream
endobj

xref
0 6
0000000000 65535 f 
0000000010 00000 n 
0000000079 00000 n 
0000000173 00000 n 
0000000301 00000 n 
0000000380 00000 n 
trailer
<<
	/Size 6
	/Root 1 0 R
>>
startxref
492
%%EOF
</script>

JavaScript

function b64toBlob(b64Data, contentType, sliceSize) {
			contentType = contentType || '';
			sliceSize = sliceSize || 1024;

			function charCodeFromCharacter(c) {
				return c.charCodeAt(0);
			}

			var byteCharacters = atob(b64Data);
			var byteArrays = [];

			for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
				var slice = byteCharacters.slice(offset, offset + sliceSize);
				var byteNumbers = Array.prototype.map.call(
					slice, charCodeFromCharacter);
				var byteArray = new Uint8Array(byteNumbers);

				byteArrays.push(byteArray);
			}

			var blob = new Blob(byteArrays, { type: contentType });
			return blob;
		}


		window.runit = function () {
			// var pdfText = event.data;
			var pdfText = pdfSource.text;
			var pdfTextEncoded = btoa(unescape(encodeURIComponent(pdfText)));

			var blob = b64toBlob(pdfTextEncoded, "application/pdf");
			var blobUrl = URL.createObjectURL(blob);
            alert("url: " + blobUrl)

			textContainer.innerText = pdfText;
			pdfContainer.innerHTML =
				'<object id="pdf"' +
					'width="400" height="240" type="application/pdf"' +
					'src="' + blobUrl+ '">' +
					'<span>PDF plugin is not available.</span>' +
				'</object>';
		}