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