javascript - 转换在 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�&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>
解决方案
推荐阅读
- ios - 快速通道匹配创建后如何将配置文件设置为 Xcode 项目?
- mockito - PowerMockito 在定义第二个“when”子句时调用 Mocked Object 上的真实方法
- python - 从 Oct2Py 返回类对象
- python - CloudFunction 创建的数据流作业上的 ModuleNotFoundError
- json - 无法在 Ionic 4 ANGULAR 中显示 json 数据
- sql - 加入 2 个表并将特定记录置于顶部
- symfony4 - 如何使用 symfony 邮件程序将图像附加到电子邮件中?
- python - 如何为 pyside2 / pyqt 脚本禁用 macOS 暗模式?
- flutter - Flutter中如何实现对Dismissible widget的删除和撤消操作?
- python - 如何在 Python 列表中的长文本中访问值?