Cordova将PDF写入文件

时间:2016-01-14 08:07:29

标签: javascript cordova pdf blob

我想为BlackBerry10编写Cordova应用程序,可以编写PDF文件(来自SharePointWebservice)并显示它。

PDF使用

作为byte []从ASP.NET Webservice传输
byte[] result = spFile.OpenBinary();

我可以使用JSON访问该文件。这很好用。 要将数据从mSON转换为可用格式,请使用以下代码:

var binary = '';
var bytes = new Uint8Array(data.d);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
    binary += String.fromCharCode(data.d[i]);
}

二进制现在看起来像这样:

%PDF-1.5%μμμμ10 obj ... startxref 103423 %% EOF

以下是使用cordova-plugin-file将其写入文件的代码。

var blob = new Blob([binary], { type: 'application/pdf' });
fileWriter.write(blob);

它适用于txt文件,但是当我尝试编写PDF文件时,我得到一个空文档。 我也尝试过window.btoa(二进制)而不是仅仅使用二进制文件。

有什么想法来创建数据blob,或者使用哪种格式?

1 个答案:

答案 0 :(得分:0)

我已使用cordova fileOpener2插件解决了问题。我使用上面的var“bytes”填充到新的命名变量数据中。

    try {
        window.resolveLocalFileSystemURL(cordova.file.externalApplicationStorageDirectory, function (directoryEntry) {
            directoryEntry.getFile(fileName, { create: true }, function (fileEntry) {

                fileEntry.createWriter(function (fileWriter) {
                    fileWriter.onwriteend = function (e) {

                        cordova.plugins.fileOpener2.open(cordova.file.externalApplicationStorageDirectory + fileName, 'application/pdf',
                            {
                                error: function (e) {
                                    ...
                                },
                                success: function () {
                                    ... //PDF has opened
                                }
                            }
                        );
                    };

                    fileWriter.onerror = function (e) {
                        ...
                    };

                    //Blob erstellen - Blackberry File Plugin verwenden
                    var blob = new Blob([data], { type: 'application/pdf' });

                    fileWriter.write(blob);

                }, function onerror(e) {
                    ...
                });
            }, function onerror(e) {
                ...
            });
        }, function onerror(e) {
            ...
        });

    } catch (e) {
        ...
    }

二手插件: cordova-plugin-file&amp; 科尔多瓦-插件文件-opener2

对于像PNG这样的其他文件类型我使用(对于jpg只是用jpg替换png):

var blob = new Blob([data], { type: 'image/png' });

写文件和

window.open(cordova.file.externalApplicationStorageDirectory + fileName);

打开并显示它。

显示txt文件非常简单,你可以这样做:

if (fileName.split('.')[1].indexOf("txt") > -1) {
    var blob = new Blob([bytes], { type: 'text/plain' });
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}

如果您有任何问题,这对我有用,请发表评论。