how to display base64 encoded pdf?

I have to display base64 pdf in new tab. I am using below code

 var windo = window.open("", ""); var objbuilder = ''; objbuilder += ('<embed width=\'100%\' height=\'100%\' src="data:application/pdf;base64,'); objbuilder += (fileData); objbuilder += ('" type="application/pdf" />'); windo.document.write(objbuilder); 

It is working in FireFox and not working in Chrome and IE. I even tried with tag, but same output, working in FF but not in Chrome and IE.

I look into below JsFiddles, for which are working in FF but not in Chrome,

My Chrome version is : Version 54.0.2840.99 m

FireFox Version : 49.0.2

Is any one have any idea, please share.

Thanks in Advance

1

5 Answers

for those who still can't do it, i found this in someone else answer, but i don't remember who...

var objbuilder = ''; objbuilder += ('<object width="100%" height="100%" data="data:application/pdf;base64,'); objbuilder += (myBase64string); objbuilder += ('" type="application/pdf">'); objbuilder += ('<embed src="data:application/pdf;base64,'); objbuilder += (myBase64string); objbuilder += ('" type="application/pdf" />'); objbuilder += ('</object>'); var win = window.open("#","_blank"); var title = "my tab title"; win.document.write('<html><title>'+ title +'</title><body>'); win.document.write(objbuilder); win.document.write('</body></html>'); layer = jQuery(win.document); 

this way we open the pdf in a new tab.

7

It should work with Chrome you can use

<iframe src="data:base64...">

<object data="data:base64...">

I've faced the same issue with IE: it's impossible to display a pdf with a base64 string.

I had to generate temporary files on the server to display them with IE he only display existing file by using a path.

You still can use JS library to display your pdf like PDF.js.

3
function printPreview(data){ var type = 'application/pdf'; let blob = null; const blobURL = URL.createObjectURL( pdfBlobConversion(data, 'application/pdf')); const theWindow = window.open(blobURL); const theDoc = theWindow.document; const theScript = document.createElement('script'); function injectThis() { window.print(); } theScript.innerHTML = 'window.onload = ${injectThis.toString()};'; theDoc.body.appendChild(theScript); } //converts base64 to blob type for windows function pdfBlobConversion(b64Data, contentType) { contentType = contentType || ''; var sliceSize = 512; b64Data = b64Data.replace(/^[^,]+,/, ''); b64Data = b64Data.replace(/\s/g, ''); var byteCharacters = window.atob(b64Data); var byteArrays = []; for ( var offset = 0; offset < byteCharacters.length; offset = offset + sliceSize ) { var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length); for (var i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } var blob = new Blob(byteArrays, { type: contentType }); return blob; } 

pass base64 data to this function and it will show the pdf in new window. This is working in chrome and firefox not in IE. Any help Please. I want it to work in IE also. Its giving error where I give the bloburl to window.

Here '@Model.binaryDocument' is the base64 data

1)By Model

<object> <embed type="text/html" width="1200" height="600" src="data:application/pdf;base64,@Model.binaryDocument" /> </object> 

2)By js

 $(document).ready(function () { var b64Data = "@Model.binaryDocument"; var contentType = "application/pdf"; const blob = b64toBlob(b64Data, contentType); const blobUrl = URL.createObjectURL(blob); window.location = blobUrl; }) const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => { const byteCharacters = atob(b64Data); const byteArrays = []; for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize); const byteNumbers = new Array(slice.length); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } const blob = new Blob(byteArrays, { type: contentType }); return blob; } 

First solution is better for prevent auto downloading pdf.

When the above answer's do not work due to Size Limitations, you can try this solution, it worked for me when I was trying to convert 16+ page PDFs from Base64 back into a PDF in Chrome.

The fix is to convert the base64 back into Binary, pack it inside of a Blob, and then set the iframe's "src" to a Blob-URI pointing to that blob.

var base64 = ("yourBase64StringVariable") const blob = base64ToBlob( base64, 'application/pdf' ); const url = URL.createObjectURL( blob ); const pdfWindow = window.open(""); pdfWindow.document.write("<iframe width='100%' height='100%' src='" + url + "'></iframe>"); function base64ToBlob( base64, type = "application/octet-stream" ) { const binStr = atob( base64 ); const len = binStr.length; const arr = new Uint8Array(len); for (let i = 0; i < len; i++) { arr[ i ] = binStr.charCodeAt( i ); } return new Blob( [ arr ], { type: type } ); } 

Original Source of this answer - Open base64 encoded pdf file using javascript. Issue with file size larger than 2 MB

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like