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>';
}