0

現時点ではできないようです。誰かがやったことがありますか?zip フォルダーに追加したい PDF ファイルがいくつかあります。

4

1 に答える 1

2

この投稿にリンクがないことをお詫びします : これは、stackoverflow に関する私の最初の投稿であり、エラー メッセージが示すように、「[I] 2 つ以上のリンクを投稿するには少なくとも 10 の評価が必要です。」


PDF (または任意のバイナリ ファイル) をダウンロードするxhr.responseType = "arraybuffer"には、生のコンテンツを取得するために使用できます (警告: これは IE 6-9 では機能しません。詳細については以下を参照してください)。jQuery を使用してそれを行うことはできませんが (まだ、github.com/jquery/jquery/pull/1525 を参照してください)、生の xhr クエリまたはバイナリ データを処理する任意の ajax ライブラリが機能します。たとえば、github.com/Stuk/jszip-utils の jszip-utils (免責事項: 私はこのライブラリの寄稿者です)。

私は最近 JSZip ドキュメント (github.com/Stuk/jszip/pull/114) に取り組み、あなたがやろうとしていることの例を追加しました。プル リクエストはまだ保留中なので、一時的な URL は次のとおりです: http://dduponchel.github.io/temp-jszip-documentation/documentation/examples/downloader.html

マージ後はhttp://stuk.github.io/jszip/documentation/examples/downloader.htmlにあるはずです。

コードは次のとおりです。

この関数は を使用JSZipUtilsして結果をラップしjQuery.Deferredますが、ArrayBuffer または Uint8Array を返すことができる任意のライブラリが機能します。

/**
 * Fetch the content, add it to the JSZip object
 * and use a jQuery deferred to hold the result.
 * @param {String} url the url of the content to fetch.
 * @param {String} filename the filename to use in the JSZip object.
 * @param {JSZip} zip the JSZip instance.
 * @return {jQuery.Deferred} the deferred containing the data.
 */
function deferredAddZip(url, filename, zip) {
    var deferred = $.Deferred();
    JSZipUtils.getBinaryContent(url, function (err, data) {
        if(err) {
            deferred.reject(err);
        } else {
            zip.file(filename, data, {binary:true});
            deferred.resolve(data);
        }
    });
    return deferred;
}

これはメイン関数で、FileSaver.js をポリフィルとして使用しますsaveAs

var $form = $("#download_form").on("submit", function () {

    var zip = new JSZip();
    var deferreds = [];

    // find every checked item
    $(this).find(":checked").each(function () {
        var url = $(this).data("url");
        var filename = url.replace(/.*\//g, "");
        deferreds.push(deferredAddZip(url, filename, zip));
    });

    // when everything has been downloaded, we can trigger the dl
    $.when.apply($, deferreds).done(function () {
        var blob = zip.generate({type:"blob"});

        // see FileSaver.js
        saveAs(blob, "example.zip");
    }).fail(function (err) {
        // handle the error here
    });
    return false;
});

IE 6-9 に関する注意: jszip および jszip-utils は IE 6-9 をサポートしますが、ArrayBuffer/Uint8Array がないと、パフォーマンスが低下します。

編集:リンク JSZip Utils GitHub: https://github.com/Stuk/jszip-utils

于 2014-04-04T20:11:10.777 に答える