javascript - 使用javascript下载pdf文件内容

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

我正在尝试使用 Internet Explorer 下载 pdf 文件内容(在用 C# 编写并使用 WatIn 库的报废应用程序中)。我尝试下载文件的网站使用安全 cookie 进行身份验证,因此我无法获取 cookie 并使用 HTTPClient 下载文件。这就是为什么我需要从 Javascript 获取文件内容。 我设法实现了这一点,但它只适用于 IE10+。 这是我使用的代码:

(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);

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

最佳答案

据我了解,您在从 AJAX 响应获取二进制内容时遇到问题,该项目旨在解决这个问题:https://github.com/Stuk/jszip-utils

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

另一个以更老式的方式构建相同方法的例子是 SO answer (不过还没有测试过)。

关于javascript - 使用javascript下载pdf文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46111782/

相关文章:

javascript - 基于 ng :repeat 的运行总计

javascript - 如何将 sass 文件导入 React 中的单个组件

c# - 从服务创建用户管理器

javascript - 如何在 Internet Explorer 浏览器的 JavaScript 中修复数组 indexOf()

asp.net - 在 IE 中混合 NTLM 与表单例份验证(空 POST 问题)

css - 在 Internet Explorer 中使用 Border-Radius 的摇摆不定的 CSS 动画

javascript - CSS 下一个和上一个剪辑路径动画

javascript - 向初次访问网站的访客显示有用提示的最佳方式 RoR/Jquery

c# - 如何判断屏幕上的选定区域包含文本?

c# - Visual Studio 2015 空白应用程序(通用 Windows): CS0731