首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不产生相同文件的Base64将JSON格式的PDF从ASP.NET传输到AngularJS

问用不产生相同文件的Base64将JSON格式的PDF从ASP.NET传输到AngularJS
EN

Stack Overflow用户
提问于 2015-06-10 00:56:29
回答 1查看 773关注 0票数 0

我将一个ASP.NET文件编码为JSON,并将其分配给JSON中我的模型对象的一个属性。响应返回到我的客户机AngularJS应用程序,文件如我所愿地被保存。文件大小增加了1/3,特殊重音字符显示为两个不同的字符,我从Adobe Reader收到一条消息,告诉我嵌入的字体无法打开,但PDF确实可以打开。

我怀疑问题出在JavaScript端的atob()解码或者网页的编码上。我尝试使用utf-8、utf-16和utf-32作为网页,结果没有区别。

ASP.NET代码:

代码语言:javascript
复制
byte[] document = File.ReadAllBytes(publishDocument.Path);
publishDocument.Document = Convert.ToBase64String(document, 0, document.Length);

JavaScript:

代码语言:javascript
复制
var content = atob(data.document);
var blob = new Blob([content], {
       type: "application/pdf"
});
saveAs(blob, data.name);
EN

回答 1

Stack Overflow用户

发布于 2015-06-11 07:58:31

我在这里找到了答案:Save base64 string as PDF at client side with JavaScript

我将内置的atob和Blob函数替换为以下函数:

代码语言:javascript
复制
function b64toBlob(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 += 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;

由于某些原因,.NET Base64和JavaScript Base64是不同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30738333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档