我正在尝试使用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>