将返回的PDF转换为JavaScript中的base64

时间:2018-06-20 13:27:21

标签: javascript pdf base64

我正在尝试使用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。 它是这样开始的: 。

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

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

%PDF-1.3
%���������
4 0 obj
<< /Length 5 0 R /Filter /FlateDecode >>
stream
x}�=�0�w��w2�&i��Uqq+ܦN�C���9����(ϣ%���ƘZ�pu���-�������-��$i��D|>L����BzJG?�����Fs���[M��ij?���<�+�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>

0 个答案:

没有答案