Comment afficher un flux PDF dans un navigateur en utilisant javascript

Je suis en train d'accéder à un service Web WCF existant (qui renvoie un fichier PDF en tant que flux d'octets) en utilisant les méthodes ajax de jquery.

Lorsque l'appel au service est terminé, je me retrouve avec une variable javascript contenant un PDF (la variable contient les données binaires, en commençant par «% PDF-1.4 …»).

J'aimerais afficher ce PDF dans une nouvelle fenêtre de navigateur, mais j'ai du mal à y parvenir.

Mes recherches ont jusqu'à présent montré que je pourrais pouvoir réaliser ce que je veux utiliser une donnée: uri, alors mon code appelé lorsque l'appel ajax est terminé est le suivant:

function GotPDF(data) { // Here, data contains "%PDF-1.4 ..." etc. var datauri = 'data:application/pdf;base64,' + Base64.encode(data); var win = window.open("", "Your PDF", "width=1024,height=768,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no"); win.document.location.href = datauri; } 

Cela provoque l'ouverture d'une nouvelle fenêtre de navigateur, mais le contenu est vide.

Fait intéressant, si je pointe mon navigateur (IE9) sur un fichier existant sur mon disque local en utilisant un fichier: uri, tel que fichier: // c: /tmp/example.pdf, j'obtiens le même résultat, c'est-à-dire un blanc fenêtre.

Ddd illustrdiceT MarcoA Marco Marco Marco Marco Marco illustr Chambe Da Marco Marco Marco Daea Da Marco Marco Marco Marco Dawo Marco Caterea Marco Chamonet ChamonetAMMMT

Le code que vous avez écrit ne présente rien, ouvrez simplement une fenêtre vierge ( location.href est un hachage pour l'historique de navigation, et non le contenu de la page).

DdddddélNéldiceadéléldiceademetéldiceademetéldiceademetéldiceademetéleterélempanelaseaea aleénieeaeaeaeaeaeaeaeaeaeaeaeaea da maneaeaeaeaeaeaea

× Intégrez le visualiseur PDF à l'intérieur d'une balise embed ou d' object . Ce n'est peut-être pas aussi simple que vous pouvez l'imaginer, consultez cette publication pour l'exemple de code. En bref, il devrait s'agir de ceci:

 <object data="your_url_to_pdf" type="application/pdf"> <embed src="your_url_to_pdf" type="application/pdf" /> </object> 

C'est un code de base, mais je suggère de suivre ce que je dis dans la publication liée si vous avez besoin d'une compatibilité croisée entre les navigateurs.

× Téléchargez le fichier sur un ordinateur local (ajoutez simplement l'URL complète de votre méthode de service Web qui produit le fichier, n'oubliez pas d'ajouter le Content-Disposition approprié dans l'en-tête).

× Ouvrez le fichier dans une nouvelle fenêtre de navigateur. Créez une balise normale lorsque vous indiquez un fichier PDF en ligne que vous souhaitez afficher dans une nouvelle fenêtre. Changez le href en javascript:functionName et dans cette fonction, créez l'URI que vous utiliserez pour appeler la méthode de service Web.

Quoi que vous fassiez, n'oubliez pas de définir le type MIME approprié dans votre réponse de plus, votre méthode ne devrait pas renvoyer un flux d'octets (même si encodé) mais une réponse valide pour votre navigateur Web.

Si vous utilisez la <embed> ou <object> pour afficher un fichier PDF diffusé (ou d'autres types de fichiers) à partir d'un serveur comme dans:

 <object data="SomeServlet?do=get_doc&id=6" type="application/pdf" width="800" height="400"> 

Assurez-vous que le serveur envoie la bonne valeur de content-disposition http, qui, dans ce cas, serait en inline .