Javascript base64字符串到pdf下载

Javascript base64字符串到pdf下载,javascript,pdf,sapui5,Javascript,Pdf,Sapui5,我面临着在SAPUI5应用程序中下载pdf的问题。问题是从后端系统获取base64字符串,但无法将其转换并显示为PDF 我能够转换base64并下载,但尺寸较小。 无法下载其下载的较大PDF文件,但显示下载失败 请帮帮我 var data =" JVBERi0xLjQNJeLjz9MNCjc1MDEgMCBvYmogPDwvTGluZWFyaXplZCAxL0wgOTM2NDM1Mi9PIDc1MDMvRSAxMjE3ODgvTiA1MjIvVCA5MjE0MjgzL0ggWyA2.."; v

我面临着在SAPUI5应用程序中下载pdf的问题。问题是从后端系统获取base64字符串,但无法将其转换并显示为PDF

我能够转换base64并下载,但尺寸较小。 无法下载其下载的较大PDF文件,但显示下载失败

请帮帮我

var data =" JVBERi0xLjQNJeLjz9MNCjc1MDEgMCBvYmogPDwvTGluZWFyaXplZCAxL0wgOTM2NDM1Mi9PIDc1MDMvRSAxMjE3ODgvTiA1MjIvVCA5MjE0MjgzL0ggWyA2..";

var uri = 'data:application/pdf;base64,' + atob(data);
var link = document.createElement("a");
link.href = uri;
link.style = "visibility:hidden";
link.download = object.FileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

根据您当前的解决方案,将使用href contains
data:application/pdf创建一个超链接;base64,'+base64数据
。单击超链接后,完整的URL将在浏览器的“新建”选项卡中打开,这使浏览器可以下载PFD文件

如果base64数据是批量数据,那么浏览器将需要时间下载PDF。有时浏览器会崩溃或导致下载失败,因为下载时间太长

备选方案

  • 使用GET_STEAM方法,您只能从后端下载pdf
  • 使用下载插件,如

根据您的要求,您可以使用客户端JavaScript获取用于文件下载的不同可用插件,将数据保存为blob,并设置下载链接以从博客获取数据,这可能会解决大型文件的问题。这种机制中最有效的方法是从服务器获取二进制数据,而不是Base64。它也适用于base64,但在blob场景中,它只是一种资源过度消耗

var data = Uint8Array.from(atob(base64_string), c => c.charCodeAt(0));
var blob = new Blob([data], {type: "octet/stream"});

var link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
...
...
是解决您问题的sap博客条目

TLDR:

var base64EncodedPDF=“JVBERi0xLjcNCiW…”;//编码字符串
var decodedPdfContent=atob(base64EncodedPDF);
var byteArray=新的Uint8Array(decodedPdfContent.length)
对于(var i=0;iTry“小”和“大”有多大?什么意思是“正在下载但显示下载失败”?(您可能是指“已开始下载”)转换并使用
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);

this._PDFViewer.setSource(_pdfurl);