2016-07-31 44 views
0

Derzeit arbeite ich in Hybrid-Anwendung. Ich habe Base 64 String erhalten, die ich als pdf herunterladen und öffnen soll, wenn der Benutzer auf den Download-Button klickt. Ich habe es geschafft, zu pdf zu konvertieren, das sich auf den folgenden Link bezieht Es wird im lokalen Speicher des Geräts gespeichert. In Android-Datei im internen Speicher gespeichert.Aber für ios pdf ist nicht Zugriff auf lokalen Speicher und Ibooks identifiziert die Datei nicht. wie pdf im download-ordner in android und ibooks für ios für bessere benutzererfahrung zu machen und machen pdf öffnen, wenn der download fertig ist ?.pdf download, display für ios und android

convert base 64 to pdf 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; 
}; 

Und dann die selbst wir brauchen die cordova-Datei Plugin herunter:

function pdfConversion(){ 
    alert("The paragraph was clicked."); 
var fileName="test.pdf"; 
var fileToSave= b64toBlob(encodedString, 'application/pdf'); 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, onFileSystemFail); 
} 
function gotFS(fileSystem) { 
    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("inside local file system"+JSON.stringify(writer)); 
     alert("JSON.stringify(writer)"+JSON.stringify(writer)); 
     console.log("contents of file now 'some sample text'"); 
     //writer.truncate(11); 
     writer.onwriteend = function(evt) { 
      writer.write(fileToSave); 
      writer.seek(4); 
      } 

    writer.onerror = function (e) { 
     // you could hook this up with our global error handler, or pass in an error callback 
     console.log('Write failed: ' + e.toString()); 
    }; 
    writer.write(fileToSave); 
    window.open(fileName, '_blank'); 

    }; 

    function onFileSystemFail(error) { 
     console.log(error.code); 
    } 

}; 
+0

In android folgt, haben wir Zugang und PDF lesen zu schreiben. In IOS ist der Sandbox-Zugriff jedoch eingeschränkt. also habe ich es geschafft, pdf zu öffnen, indem ich den codierten String wie folgt benutze: window.open ("data: application/pdf; base64," + encodedString, "_blank", "location = nein, hidden = no, closebuttoncaption = Close"); – Abinaya

Antwort

-1

In Android, haben wir Zugriff und PDF lesen zu schreiben. In IOS ist der Zugriff auf Sandbox jedoch eingeschränkt.

ich es geschafft, PDF zu öffnen codierte Zeichenfolge unter Verwendung als

window.open("data:application/pdf;base64,"+encodedString, "_blank","location=no,hidden=no,closebuttoncaption=Close");