保存的base64字符串作为PDF在使用JavaScript客户端(Save base64 stri

2019-06-14 19:26发布

所以在这里我的问题:我有一个PDF文件作为我是从服务器获取一个base64字符串。 我想用这个字符串来直接显示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需要扩展存在,但数据-URI现在没有在这种情况下不显示它。 究其原因,我坚持在这里,如果Chrome和Safari得到它的工作,那么必须有对FF和IE浏览器的解决方案

我知道有一些相关的问题,这个,但没有真正确切的一个,现在也有点旧的。 我认识的一个解决办法是必须在服务器端生成的PDF格式,但我想在客户端生成它。

所以,请乡亲们聪明,是可以通过一些黑客或额外的JS下载插件吗?

Answer 1:

您应该能够使用它来下载文件

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


Answer 2:

像一个显示下方下载PDF格式的base64您可以创建一个锚:

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

其中pdfData是您的base64编码的PDF像“数据:应用程序/ PDF格式; BASE64,JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4 + CnN0cmVhbQp4nO1cyY4ktxG911fUWUC3kjsTaBTQ1Ytg32QN4IPgk23JMDQ2LB / 0 + 2YsZAQzmZk1PSPIEB ......”



Answer 3:

我知道这个问题是旧的,但也想做到这一点,并碰到它而看。 对于Internet Explorer我使用的代码从这里保存的Blob。 要创建一个从字符串的base64一个blob有这个网站的许多成果,所以它不是我的代码,我只是不记得具体的来源:

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;

使用链接filesaver:

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


文章来源: Save base64 string as PDF at client side with JavaScript