base64转换字符串作为PhoneGap的PDF格式 [英] Convert base64 string as pdf in phonegap

查看:216
本文介绍了base64转换字符串作为PhoneGap的PDF格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用我收到一个base64字符串,再presents的PDF文件。我希望用户能够以base64保存为PDF格式,以他的电话。我一直在寻找到科尔多瓦文件传输插件,但该需要(服务器)文件所在的路径能下载,而不是转换成一个base64字符串。

In my app I have received a base64 string that represents a PDF. I want the user to be able to save the base64 as a pdf to his phone. I have been looking in to the cordova-file-transfer plugin but that requires a (server)path where the file can be downloaded from, instead of converting a base64 string.

有没有人成功地使用base64字符串中的PhoneGap下载一个PDF?

Has anybody succeeded in downloading a pdf in phonegap using a base64 string?

推荐答案

在一些更多的搜索和尝试,我发现一些工作。

After some more searching and trying I found something that worked.

<一个href=\"http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\">Converting BASE64为PDF BLOB

//Helper function that converts base64 to blob
function b64toBlob(b64Data, contentType, sliceSize) {
    var input = b64Data.replace(/\s/g, ''),
        byteCharacters = atob(input),
        byteArrays = [],
        offset, slice, byteNumbers, i, byteArray, blob;

    contentType = contentType || '';
    sliceSize = sliceSize || 512;

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

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

        byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    //Convert to blob. 
    try {
        blob = new Blob(byteArrays, { type: contentType });
    }
    catch (e) {
        // TypeError old chrome, FF and Android browser
        window.BlobBuilder = window.BlobBuilder ||
                             window.WebKitBlobBuilder ||
                             window.MozBlobBuilder ||
                             window.MSBlobBuilder;
        if (e.name == 'TypeError' && window.BlobBuilder) {
            var bb = new BlobBuilder();
            for (offset = 0; offset < byteArrays.length; offset += 1) {
                bb.append(byteArrays[offset].buffer);
            }                    
            blob = bb.getBlob(contentType);
        }
        else if (e.name == "InvalidStateError") {
            blob = new Blob(byteArrays, {
                type: contentType
            });
        }
        else {
            return null;
        }
    }

    return blob;
};

然后把下载本身我们需要科尔多瓦文件插件:

var fileToSave= b64toBlob(fileData, 'application/pdf'); 
writeFile();

function writeFile() {
    console.log("request file system");
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemRetrieved, onFileSystemFail);
}

function onFileSystemRetrieved(fileSystem) {
    console.log("file system retrieved");
    fileSystem.root.getFile(fileName, { create: true }, onFileEntryRetrieved, onFileSystemFail);
}

function onFileEntryRetrieved(fileEntry) {
    console.log("file entry retrieved");
    fileEntry.createWriter(gotFileWriter, onFileSystemFail);
}

function gotFileWriter(writer) {
    console.log("write to file");

    writer.onwrite = function (evt) {
        alert('done');
    }
    writer.write(fileToSave);

    window.open(fileName, '_blank');
}
function onFileSystemFail(error) {
    console.log(error.code);
    alert(error.code)
}

这篇关于base64转换字符串作为PhoneGap的PDF格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆