我们如何在Android的Cordova.inappbrowser中显示PDF from base 64字符串

我们如何在Android的Cordova.inappbrowser中显示PDF from base 64字符串,android,cordova,cordova-plugins,phonegap-plugins,hybrid-mobile-app,Android,Cordova,Cordova Plugins,Phonegap Plugins,Hybrid Mobile App,我的要求是在cordova.InAppBrowser中显示pdf base64字符串,它在Android中没有显示 但它显示在iOS应用程序中。 我正在使用下面的代码在AppBrowser中显示PDF $scope.urlString = "data:application/pdf;base64,"+encodeURI($scope.PdfString); var ref = cordova.InAppBrowser.open($scope.urlString, '_blank', 'tool

我的要求是在cordova.InAppBrowser中显示pdf base64字符串,它在Android中没有显示

但它显示在iOS应用程序中。 我正在使用下面的代码在AppBrowser中显示PDF

$scope.urlString = "data:application/pdf;base64,"+encodeURI($scope.PdfString);
var ref = cordova.InAppBrowser.open($scope.urlString, '_blank',  'toolbarposition=bottom');

有人知道如何在Cordova浏览器中显示PDF base64字符串吗?或者是否有其他显示方式。

这就是我在Android和IOS上实现的干杯

使用这个插件

<plugin name="cordova-plugin-inappbrowser" />
<plugin name="cordova-plugin-file"/>
<plugin name="cordova-plugin-file-transfer"/>
<plugin spec="https://github.com/tectronik/cordova-plugin-file-opener2-tectronik.git"/>

为您工作的代码。

    var blob = b64toBlob("base64 string here", 'application/pdf');
    var pathFile = "";
    var fileName ='PdfName.pdf';
    var contentFile = blob;
    if (ionic.Platform.isIOS()) {
        var pathFile = cordova.file.documentsDirectory
    } else {
        var pathFile = cordova.file.externalRootDirectory
    }

    $cordovaFile.writeFile(pathFile, fileName, contentFile, true)
        .then(function(success) {
            $scope.filePath=pathFile + fileName;
            // console.log("File saved on internal storage location," + pathFile + fileName);

        if (ionic.Platform.isAndroid()) {
            $cordovaFileOpener2.open($scope.filePath,
                'application/pdf'
                ).then(function() {
                    // file opened successfully
                    // alert(' file opened successfully')
                }, function(err) {
                    alert('An error occurred '+err);
                });
        }else{
            var ref = cordova.InAppBrowser.open(data, '_blank', 
    'location=no,toolbar=yes');
        }    
}, function(error) {

}); 
function b64toBlob(b64Data, contentType, sliceSize) {
        contentType = contentType || '';
        sliceSize = sliceSize || 512;

        b64Data = b64Data.replace(/^[^,]+,/, '');
        b64Data = b64Data.replace(/\s/g, '');

        var byteCharacters = 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 byteCharacters;
        return blob;
    }
var blob=b64toBlob(“这里是base64字符串,'application/pdf');
var pathFile=“”;
var fileName='PdfName.pdf';
var contentFile=blob;
if(ionic.Platform.isIOS()){
var pathFile=cordova.file.documents目录
}否则{
var pathFile=cordova.file.externalRootDirectory
}
$cordovaFile.writeFile(路径文件、文件名、内容文件、true)
.然后(功能(成功){
$scope.filePath=pathFile+fileName;
//log(“保存在内部存储位置的文件,”+pathFile+fileName);
if(ionic.Platform.isAndroid()){
$cordovaFileOpener2.open($scope.filePath,
'应用程序/pdf'
).然后(函数(){
//文件已成功打开
//警报('文件已成功打开')
},函数(err){
警报(“发生错误”+错误);
});
}否则{
var ref=cordova.InAppBrowser.open(数据为“空白”),
“位置=否,工具栏=是”);
}    
},函数(错误){
}); 
函数b64toBlob(b64Data、contentType、sliceSize){
contentType=contentType | |“”;
切片大小=切片大小| | 512;
b64Data=b64Data.replace(/^[^,]+,/,'');
b64Data=b64Data.replace(/\s/g');
var byteCharacters=atob(b64Data);
var ByteArray=[];
对于(变量偏移量=0;偏移量
终于找到了解决方案 我们需要在我们的项目中有cordova文件插件

cordova插件添加cordova插件文件

var myBase64="JVBERI0xLJCKCJEGMCBVYMOGICUGZW50CNKGCG9PBNQKPDWKICAVVHLWZSAVQ2F0YWXVZWOGIC9QYWDLCYAYIDAGGUGYMCBVYMOKPDWKICAVVHLWZUGFNZXMKICAVKWKWFCB3GGWYDAGMJAWIDIWMCBDCIAGL0NVDW50IDEKICAV2LKYBBIDMGMCBF0KJ4KZW5KB2JQCK2JQCW8CIAGL5CGU5CGUKYZ2UKJJKJ8GICAVZ8GICAVZJ8GICAVZ8GICAVKJJJJ8GICAGZ8GICAGZZZZ8GICAGZZJJJJJJJJ8GCUKKJJJJJJJJJ8GIG8GIGZZZ4.中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国大规模杀伤性武器AWMDawmdewidawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmdawmd;
//定义Blob的类型的步骤
var contentType=“应用程序/pdf”;
//如果cordova.file不可用,请改用:
//var folderpath=”file:///storage/emulated/0/";
var folderpath=cordova.file.externalRootDirectory;
var filename=“helloWorld.pdf”;
savebase64AsPDF(folderpath,filename,$scope.PdfString,contentType);
函数b64toBlob(b64Data、contentType、sliceSize){
contentType=contentType | |“”;
切片大小=切片大小| | 512;
var byteCharacters=atob(b64Data);
var ByteArray=[];
对于(变量偏移量=0;偏移量}
为了补充@Byka的解决方案,我们应该在ionic 3中安装它

  • 爱奥尼亚cordova插件添加cordova插件文件
  • npm安装--保存@ionic native/file
  • 爱奥尼亚cordova插件添加cordova-plugin-file-opener2
  • npm安装--save@ionic native/file opener
          <script src="build/polyfills.js"></script>
    
    function b64toBlob(b64Data, contentType, sliceSize) {
        contentType = contentType || '';
        sliceSize = sliceSize || 512;
        var byteCharacters = 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;
    }
    
    function savebase64AsPDF(folderpath, filename, content, contentType) {
        // Convert the base64 string in a Blob
        var DataBlob = b64toBlob(content, contentType);
        window.resolveLocalFileSystemURL(folderpath, function (dir) {
            dir.getFile(filename, { create: true }, function (file) {
                file.createWriter(function (fileWriter) {
                    fileWriter.write(DataBlob);
                    var finalPath = folderpath + filename;
                    //window.open(finalPath, '_system');
                    cordova.plugins.fileOpener2.open(finalPath, 'application/pdf'
                        //,
                        //{
                        //    error: function (e) {
                        //        alert('Error status: ' + e.status + ' - Error message: ' + e.message);
                        //    },
                        //    success: function () {
                        //        alert('file opened successfully');
                        //    }
                        //}
                );
    
                }, function () {
                    alert("err");
            });
        });
    }
    
    function PrintFile(id) {
                jQuery("#large-indicator").css("display", "inline");
                $.ajax({
                    type: "POST",
                    contentType: "application/json",
                    dataType: "json",
                    url: "myurl",
                    data: JSON.stringify({
                        "id": id
                    }),
                    success: function (Response) {
                        jQuery("#large-indicator").css("display", "none");
                        var contentType = "application/pdf";
                        var folderpath = cordova.file.externalRootDirectory;
                        if (folderpath == null)
                            folderpath = cordova.file.dataDirectory
                        var filename = id + ".pdf";
                        savebase64AsPDF(folderpath, filename, Response.value, contentType);
                    },
                    error: function (Response) {
                        jQuery("#large-indicator").css("display", "none");
                        var mex = Response["responseText"];
                        alert(mex);
                    }
                });
    }