2016-08-25 2 views
2

J'ai actuellement une application de bureau construite avec Node Webkit. Lorsque l'utilisateur est en ligne, l'application va ouvrir des fichiers PDF à partir du serveur. Je puis enregistrer ces fichiers localement afin qu'ils soient disponibles en mode hors connexion. J'utilise fs.writeFile() du système de fichiers Node.js pour enregistrer le PDF localement, mais lorsque j'essaie de l'ouvrir via l'application, le PDF est vide. Lorsque j'essaie de l'ouvrir directement à partir du dossier, j'obtiens l'erreur ci-dessous.Node.js - télécharger et enregistrer le fichier PDF localement pour hors ligne - fichier endommagé

enter image description here

Quelqu'un peut-il s'il vous plaît conseiller?

//save PDF file for offline 
function saveFile(pdfvar) { 
    var filename = 'test.pdf'; 
    fs.writeFile(filename, pdfvar); 
} 

//open PDF in new window 
$('#stage').on('click', '#pdflink', function(event){ 
    var pdfvar = (this.getAttribute('data-pdffile')); 
    window.open(pdfvar, "_blank"); 
    if(online===true){ 
     saveFile(pdfvar); 
    } 
}); 
+0

est votre pdf se rend dans une nouvelle fenêtre ?? Et ajouter le message d'erreur. – vkstack

+0

désolé, j'ai oublié d'ajouter l'erreur! oui, il ouvre une nouvelle fenêtre mais le PDF ne charge pas du tout c'est juste – LeeTee

+0

Cela arrive car 'pdfvar' ne contient pas de fichier pdf valide – vkstack

Répondre

0
  1. Tenez-vous le contenu entier d'un PDF dans un élément DOM attribut this.getAttribute('data-pdffile')? C'est où il peut être corrompu.

  2. Lorsque vous appelez

    window.open(pdfvar, "_blank"); 
    

le contenu ne soit pas prêt à être ouvert comme ça. Il devrait d'abord être converti en URL encodée en base64.

window.open('data:application/pdf,' + escape(pdfvar)); 

MISE À JOUR:

Le problème réel est que l'OP a essayé d'enregistrer le fichier en utilisant son URL dans "pdfvar"

fs.writeFile(filename, pdfvar); 

mais le fichier créé a été contenant seulement URL elle-même. Ce qui était nécessaire était de télécharger le fichier en utilisant d'abord une bibliothèque http:

+0

1.Im ne contient pas tout le contenu du DOM. Juste l'URL du fichier PDF. Cela doit être là où je vais mal. Comment puis-je réparer ça? – LeeTee

+0

2. Maintenant, je reçois, "Impossible de charger le document PDF" même lorsque je suis en ligne. – LeeTee

+0

@LeeTee alors pourquoi transmettez-vous l'URL à "saveFile"? Ensuite, vous obtiendrez fs.writeFile ('test.pdf', 'http://address.com/file.pdf') Le deuxième paramètre devrait être des données réelles et non une URL. Votre fichier enregistré localement est maintenant un fichier texte avec juste une URL à l'intérieur ... – Pawel