Сохраните PDF-файл в Ponegap, используя cordova-plugin-file - PullRequest
0 голосов
/ 06 сентября 2018

Привет, я пытаюсь сохранить PDF Dataatring в Phonegap с помощью файла cordova-plugin-file

Пример:

%PDF-1.3
%ºß¬à
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/MediaBox [0 0 595.28 841.89]
/Contents 4 0 R
>>
endobj
4 0 obj
<</Length 8757>>
   

в PDF-файл с этой функцией:

savePDF("Storecheck"+surveyID+".pdf", pdfOutput)

function savePDF(fileName, fileData) {

  console.log(fileData);

  //function writeToFile(fileName, data) {

  window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(directoryEntry) {
    directoryEntry.getFile(fileName, {
      create: true
    }, function(fileEntry) {
      fileEntry.createWriter(function(fileWriter) {
        fileWriter.onwriteend = function(e) {
          // for real-world usage, you might consider passing a success callback
          console.log('Speichern von "' + fileName + '"" abgeschlossen.');
        };

        fileWriter.onerror = function(e) {
          // you could hook this up with our global error handler, or pass in an error callback
          console.log('speichern fehlgeschlagen ' + e.toString());
        };

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

Я не получаю сообщений об ошибках, но файл не появляется. Кроме того, я хотел бы сохранить PDF в «документы», а не в «.file.dataDirectory»

Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

О, да, я решил это через три дня
на самом деле мне нужно было изменить только одну строку кода

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

LocalFileSystem.PERSISTENT работает только на Android С ROOT

LocalFileSystem.PERSISTENT обозначает системный URL в Android, который вы можете увидеть в документации: Схемы файловой системы

Я изменил его на cordova.file.externalDataDirectory

На Phongap Desktop вывод NULL вы должны собрать приложение для работы

так что я вышел с этим:

savePDF("Storecheck.pdf", pdfOutput)

 function savePDF(fileName, fileData) {

                window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dir) {
                    dir.getFile(fileName, {create: true, exclusive: false}, function (fileEntry) {
                        fileEntry.createWriter(function (writer) {
                            writer.onwrite = function (evt) {
                                console.log("write success");
                                alert(fileName+" wurde gespeichert unter " + cordova.file.externalDataDirectory );
                            };

                            console.log("writing to file");
                            writer.write(fileData);
                        })

                    }, function () {


                        console.log("ERROR SAVEFILE");
                        alert ("heute gibts keine PDF")

                    });
                });
            }
0 голосов
/ 07 сентября 2018

Согласно документации по кордовому плагину Я изменил функцию. https://jsfiddle.net/frief/7umnwj0r/1/

Я также добавил

<preference name="AndroidPersistentFileLocation" value="Internal" />
    <preference name="AndroidPersistentFileLocation" value="Compatibility" />
    <preference name="AndroidExtraFilesystems" value="sdcard,cache" />
в config.xml теперь это выглядит так

<?xml version='1.0' encoding='utf-8'?>
<widget id="de.check" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name> check</name>
<description>
    check
</description>
<author email="info@heins.de" href="http://ally.de">
    Development
</author>


<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="sdcard,cache" />

<preference name="iosPersistentFileLocation" value="Library" />
<preference name="iosPersistentFileLocation" value="Compatibility" />


<!-- Don't block any requests -->
<access origin="*" />

<content src="index.html" />
<plugin name="cordova-plugin-battery-status" spec="~1.2.2" />
<plugin name="cordova-plugin-camera" spec="~2.3.1" />
<plugin name="cordova-plugin-file" spec="~4.3.1" />
<plugin name="cordova-plugin-file-transfer" spec="~1.6.1" />
<plugin name="cordova-plugin-geolocation" spec="~2.4.1" />
<plugin name="cordova-plugin-vibration" spec="~2.1.3" />
<plugin name="cordova-plugin-statusbar" spec="~2.2.1" />
<plugin name="cordova-plugin-whitelist" source="npm"/>

<engine name="android" spec="^6.4.0" />


</widget>

Теперь у меня проблема в том, что я всегда получаю ошибку, что мой файл не может быть создан. Я думаю, что это как-то связано с правами доступа, но я точно не знаю.

...