【问题标题】:Cordova write PDF to fileCordova 将 PDF 写入文件
【发布时间】:2016-04-19 11:24:12
【问题描述】:

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

PDF 是从 ASP.NET Web 服务作为字节[] 使用

传输的
byte[] result = spFile.OpenBinary();

我可以使用 JSON 访问该文件。这工作正常。 要将数据从 JSON 转换为可用格式,我使用以下代码:

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%µµµµ 1 0 obj ... startxref 103423 %%EOF

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

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

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

有什么想法可以创建数据 blob 或使用哪种格式?

【问题讨论】:

    标签: javascript cordova pdf blob


    【解决方案1】:

    我已经通过使用 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-opener2

    对于我使用的其他文件类型,如 PNG(对于 jpg,只需将 png 替换为 jpg):

    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);
    }
    

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

    【讨论】:

    • 这里的数据是什么?我认为这就是问题所在。
    猜你喜欢
    • 2016-08-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多