画像 JavaScript を使用してクライアント側で base64 文字列を PDF として保存する




pdf.js base64 (3)

以下のようなアンカーを作成して、 base64 pdfをダウンロードすることができます:

<a download=pdfTitle href=pdfData title='Download pdf document' />

pdfDataは、のようなあなたのbase64でエンコードされたPDFファイルです"データ:アプリケーション/ PDF; base64で、JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nO1cyY4ktxG911fUWUC3kjsTaBTQ1Ytg32QN4IPgk23JMDQ2LB / 0 + 2YsZAQzmZk1PSPIEB ..."

だからここで私の問題:私は、私はサーバーから取得しているbase64文字列としてPDFファイルがあります。 この文字列を使用して、PDFをブラウザに直接表示するか、リンクをクリックすると「別名で保存...」というオプションを付けたいと思います。 ここで私が使用しているコード:

<!doctype>
<html>
<head>
   <title>jsPDF</title>
   <script type="text/javascript" src="../libs/base64.js"></script>
   <script type="text/javascript" src="../libs/sprintf.js"></script>
   <script type="text/javascript" src="../jspdf.js"></script>

       <script type="text/javascript">

        function demo1() {
            jsPDF.init();
            jsPDF.addPage();
            jsPDF.text(20, 20, 'Hello world!');
            jsPDF.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');

            // Making Data URI
            var out = jsPDF.output();
            var url = 'data:application/pdf;base64,' + Base64.encode(out);

            document.location.href = url;
         }
    </script>
</head>
<body>

<a href="javascript:demo1()">Run Code</a>

</body>
</html>

ChromeとSafariでうまく動作します。 Firefoxはpdfを認識しますが、FFでは拡張機能が必要ですが、この場合はdata-uriには表示されません。 ここで主張している理由は、クロムとサファリがうまくいくなら、FFとIEの解決策がなければならない

私はこれにいくつかの関連する質問があることを知っていますが、本当に正確なものではありませんし、少し古いものもあります。 私は回避策は、サーバー側で生成されたPDFを持っているが、私はクライアント側でそれを生成したいと思います。

インテリジェントな方々に感謝してください。いくつかのハッキングや追加のJSダウンロードプラグインで可能でしょうか?


ファイルをダウンロードするには、次のコマンドを使用します。

window.open("data:application/pdf;base64," + Base64.encode(out));

私はこの質問が古いことを知っているだけでなく、これを達成したいと思って見ている間にそれを見つけました。 インターネットエクスプローラの場合は、 hereからBlobを保存するコードを使用しhereた。 base64の文字列からブロブを作成するには、このサイトに多くの結果があったので、私のコードではなく、特定のソースを覚えていません:

function b64toBlob(b64Data, contentType) {
    contentType = contentType || '';
    var sliceSize = 512;
    b64Data = b64Data.replace(/^[^,]+,/, '');
    b64Data = b64Data.replace(/\s/g, '');
    var byteCharacters = window.atob(b64Data);
    var byteArrays = [];

    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        var slice = byteCharacters.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    var blob = new Blob(byteArrays, {type: contentType});
    return blob;

リンクされたファイルサーバーの使用:

if (window.saveAs) { window.saveAs(blob, name); }
    else { navigator.saveBlob(blob, name); }




base64