使用javascript下载pdf文件内容

时间:2017-09-08 08:16:22

标签: javascript c# internet-explorer pdf internet-explorer-9

我正在尝试使用Internet Explorer下载pdf文件内容(在使用C#编写的报废应用程序中并使用WatIn库)。我尝试下载该文件的网站使用带有安全cookie的身份验证,因此我无法获取cookie并使用(function() { try { var a = new Uint8Array(1); return; } catch (e) {} function subarray(start, end) { return this.slice(start, end); } function set_(array, offset) { if (arguments.length < 2) offset = 0; for (var i = 0, n = array.length; i < n; ++i, ++offset) this[offset] = array[i] & 0xFF; } function TypedArray(arg1) { var result; if (typeof arg1 === 'number') { result = new Array(arg1); for (var i = 0; i < arg1; ++i) result[i] = 0; } else result = arg1.slice(0); result.subarray = subarray; result.buffer = result; result.byteLength = result.length; result.set = set_; if (typeof arg1 === 'object' && arg1.buffer) result.buffer = arg1.buffer; return result; } window.Uint8Array = TypedArray; window.Uint32Array = TypedArray; window.Int32Array = TypedArray; })(); function _arrayBufferToBase64(buffer) { var binary = ''; var bytes = new Uint8Array(buffer); var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return window.btoa(binary); } var callFinished = false; var callPDFResult = ''; var xhr = new XMLHttpRequest(); xhr.open('GET', 'fileUrl', true); if ('responseType' in xhr) { xhr.responseType = 'arraybuffer'; } else if ('overrideMimeType' in xhr) { xhr.overrideMimeType('text/plain; charset=x-user-defined'); } else { xhr.setRequestHeader('Accept-Charset', 'x-user-defined'); } xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { callFinished = true; callPDFResult = _arrayBufferToBase64(xhr.response); } }; xhr.send(null); 下载该文件。这就是我需要从Javascript获取文件内容的原因。 我设法实现了这一点,但它只适用于IE10 +。 这是我使用的代码:

dt

此代码的问题在于它不适用于IE9及更早版本。我至少需要覆盖IE8和IE9

1 个答案:

答案 0 :(得分:1)

据我所知,你在从AJAX响应中获取二进制内容时遇到问题,这个项目的目的是为了解决这个问题:https://github.com/Stuk/jszip-utils

正如您在getBinaryContent函数的xhr处理部分(jszip-utils.js中的_getBinaryFromXHR调用)中所看到的,在旧的IE上,您需要通过VBScript而不是标准的xhr响应从xhr获取数据(请参阅覆盖_getBinaryFromXHR的jszip-utils-ie.js。

同样方法的另一个例子构成了更为老式的方式,在SO answer中(虽然没有对此进行过测试)。

相关问题