【问题标题】:Non UTF-8 characters in PDF Javascript BlobPDF Javascript Blob 中的非 UTF-8 字符
【发布时间】:2017-08-16 11:59:57
【问题描述】:

我有一个从 WebApi 2 应用程序提供给 AngularJS 客户端的 PDF 文件。我使用file-saver 将文件保存在客户端,如下所示(在 TypeScript 中):

   this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`)
    .then((response: ng.IHttpPromiseCallbackArg<any>) => {
        var file = new Blob([response.data], { type: 'application/pdf' });
        saveAs(file, 'my.pdf');
    });

我这样做的原因是我可以使用不记名令牌来授权对 PDF 的访问(这是通过拦截器添加的)。除非 PDF 文件包含非 UTF8 字符,否则此方法有效。在后一种情况下,文件仍会下载,但当我打开它时,它显示为空白。打开文件我可以看到非 UTF8 字符被替换为 □ 字符。在 JavaScript 中,当我在调试器中检查 response.data 的字符串值时,我看到这些字符由 � 表示。我是否正确地假设,因为文件是从 JavaScript 中的字符串写入的,所以无论我做什么,我都无法从 JavaScript 中正确保存包含非 UTF8 字符的文件?

【问题讨论】:

    标签: angularjs pdf utf-8 blob angularjs-http


    【解决方案1】:

    字符是 UTF-8 解析器在尝试解析非法 UTF-8 时插入的 Unicode Replacement Character \uFFFD

    PDF 文件不是 UTF-8 字符串;它们是二进制文件。

    为避免从 UTF-8 转换为 DOMstring (UTF-16),请将配置设置为 responseType: 'blob':

       var config = {responseType: 'blob'};
    
       this.$http.get(`${webUrl}api/pdf?id=${fileDto.id}`, config)
         .then((response: ng.IHttpPromiseCallbackArg<any>) => {
           ̶v̶a̶r̶ ̶f̶i̶l̶e̶ ̶=̶ ̶n̶e̶w̶ ̶B̶l̶o̶b̶(̶[̶r̶e̶s̶p̶o̶n̶s̶e̶.̶d̶a̶t̶a̶]̶,̶ ̶{̶ ̶t̶y̶p̶e̶:̶ ̶'̶a̶p̶p̶l̶i̶c̶a̶t̶i̶o̶n̶/̶p̶d̶f̶'̶ ̶}̶)̶;            
           var file = response.data;
           saveAs(file, 'my.pdf');
       });
    

    有关详细信息,请参阅

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 2011-09-30
      • 1970-01-01
      • 2011-04-04
      • 2017-06-18
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多