首页 > 解决方案 > 转换在 JavaScript 中响应 base64 返回的 PDF

问题描述

我正在尝试使用 PDF.js 在 iframe 中显示 PDF(这不是 PDF.js 特定的问题。我只是给出上下文)。通过调用 REST Web 服务检索 PDF。我需要将 PDF 作为 base64 编码字符串传递给 PDF.js。

我已经尝试了几种转换(参见下面的示例),但它们都没有产生可以显示的工作 base64 字符串。我认为我的问题与正在流式传输的文件有关,但我不知道如何以正确的方式处理这个问题。下面的响应摘要显示响应包含多个流。

为了确认其余代码正常工作,我尝试将 var pdfData 设置为使用https://www.browserling.com/tools/file-to-base64生成的 pdf 的 base64 字符串,它工作正常。它正确显示我的pdf。它的开头是这样的:JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAF9jj0LwjAQhn..

任何人都可以就如何从我从 REST Web 服务获得的响应中获取有效的 base64 编码字符串提供一些建议吗?

将其摘要写入控制台以进行响应(删除一些数据以显示流):

%PDF-1.3
%���������
4 0 obj
<< /Length 5 0 R /Filter /FlateDecode >>
stream
x}�=�0�w��w2�&amp;i��Uqq+ܦN�C���9����(ϣ%���ƘZ�pu���-�������-��$i��D|>L����BzJG?�����Fs���[M��ij?���&lt;�+�e�հ���ڇ   �Z%�����
z)/�
endstream
endobj
5 0 obj
[removed content]
<< /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >>
stream
x��wTS��Ͻ7��" %�z     �;HQ�I�P��&vDF)VdT�G�"cE��b�  �P��QDE�݌k �5�ޚ��Y�����g�}׺
[removed content]
<< /Size 24 /Root 12 0 R /Info 1 0 R /ID [ <73b9fa8794abac5a7f7e740da4a1ae7a>
<73b9fa8794abac5a7f7e740da4a1ae7a> ] >>
startxref
13328
%%EOF

代码摘要:

<script>
  var pdfData = '';

  jQuery(document).ready(function($) {

    $.ajax('myurl',
      {
        beforeSend: function(xhr) {
          // Set the OAuth header from the session ID
          xhr.setRequestHeader('Authorization', 'Bearer removed');
        },
        success: function(response) {
          console.log("response: " + response);

          var pdfData = window.btoa(unescape(encodeURIComponent(response)));
          //Result (first line only): JVBERi0xLjMKJe+/ve+/ve+/ve+/ve+/ve+/

          //var pdfData = btoa(unescape(response));
          //Result: results in Failed to execute 'btoa' on 'Window': 
          //        The string to be encoded contains characters outside of the Latin1 range.

          //var pdfData = window.btoa(unescape(encodeURIComponent(response)));
          //Result (first line only): JVBERi0xLjMKJe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQo0ID


          //var pdfData = Base64.btoa(response);
          //Result: Failed to execute 'btoa' on 'Window': 
          //        The string to be encoded contains characters outside of the Latin1 range.

          //var pdfData = Base64.encode(response);
          //Result (first line only): JVBERi0xLjMKJe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vQo0ID



        },
        error: function(jqXHR, textStatus, errorThrown) {
          alert(jqXHR.status + ': ' + errorThrown);
        }
      }
    );
  });

  //more code to pass pdfData to pdf viewer
</script>

标签: javascriptpdfbase64

解决方案


推荐阅读