Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
I have a base64 encoded pdf content and want to view it using sap.m.PDFViwer. Since PDFViewer only accepts URI as source to display pdf:



So I should first create a blob url or a data url for my pdf content.
var base64EncodedPDF = "JVBERi0xLjcNCiW..."; // the encoded string
var decodedPdfContent = atob(base64EncodedPDF);
var byteArray = new Uint8Array(decodedPdfContent.length)
for(var i=0; i<decodedPdfContent.length; i++){
byteArray[i] = decodedPdfContent.charCodeAt(i);
}
var blob = new Blob([byteArray.buffer], { type: 'application/pdf' });
var _pdfurl = URL.createObjectURL(blob);

However when I use this blob url as source of my PDFViewer, my pdf can't be loaded at all however my blob url is accessible.

At last I find out that UI5 would validate the pdf url after rendering the PDFViewer dialog, only if my blob url is in the whitelist of UI5, my url can be considered as validated.

what I do is as below:
if(!this._PDFViewer){
this._PDFViewer = new sap.m.PDFViewer({
width:"auto",
source:_pdfurl // my blob url
});
jQuery.sap.addUrlWhitelist("blob"); // register blob url as whitelist
}
this._PDFViewer.downloadPDF = function(){
File.save(
byteArray.buffer,
"Hello_UI5",
"pdf",
"application/pdf"
);
};
this._PDFViewer.open();

The method addUrlWhitelist has four parameters.
jQuery.sap.addUrlWhitelist(protocol, host, port, path);

After I added my blob url as whitelist then the pdf can be loaded successfully!

 

What happens in UI5?

line 269: PDFViewer try validate the source url



In jQuery.sap.encoder.js, the method validateUrl would be executed:



And I can see from line 504(still in method validateUrl) why my blob url is now validated after doing addUrlWhiteList, the protocal,host,port and path would be checked:



 

The PDFViewer loads my pdf as below:

18 Comments