Comment envoyer byte[] en tant que pdf pour navigateur dans l'application web java?
Dans la méthode action (JSF), j'ai quelque chose comme ci-dessous:
public String getFile() {
byte[] pdfData = ...
//how to return byte[] as file to web browser user ?
}
Comment envoyer byte[] en tant que pdf pour navigateur ?
Vous devez vous connecter pour publier un commentaire.
Dans la méthode d'action, vous pouvez obtenir le HTTP de la réponse de servlet sous le JSF hottes par
ExternalContext#getResponse()
. Ensuite, vous devez définir au moins les HTTPContent-Type
en-tête deapplication/pdf
et le HTTPContent-Disposition
en-tête deattachment
(lorsque vous souhaitez afficher une Enregistrer sous dialogue) ou àinline
(lorsque vous voulez laisser le webbrowser gérer l'affichage lui-même). Enfin, vous devez vous assurer que vous appelezFacesContext#responseComplete()
par la suite pour éviterIllegalStateException
s envoler.Kickoff exemple:
Cela dit, si vous avez la possibilité de télécharger le PDF du contenu
InputStream
plutôt qu'unbyte[]
, je vous recommande de l'utiliser au lieu de sauver la webapp à partir de porcs de la mémoire. Vous, alors il suffit d'écrire dans le bien-connuInputStream
-OutputStream
boucle l'habitude de Java IO façon.Vous avez juste à définir le type mime à
application/x-pdf
dans votre réponse. Vous pouvez utiliser le setContentType(String contentType) méthode pour ce faire, dans la servlet cas.Dans JSF/JSP, vous pouvez utiliser cette, avant d'écrire votre réponse:
et
response.write(yourPDFDataAsBytes());
à écrire vos données.Mais vraiment, je vous conseille d'utiliser des servlets dans ce cas. JSF est utilisé pour générer du code HTML de vues, pas de PDF ou des fichiers binaires.
Avec des servlets, vous pouvez utiliser ceci :
Ressources :
Lors de l'envoi des données brutes dans le navigateur en utilisant JSF, vous devez extraire les
HttpServletResponse
de laFacesContext
.À l'aide de la
HttpServletResponse
, vous pouvez envoyer des données brutes dans le navigateur à l'aide de la norme IO API.Voici un exemple de code:
Aussi, voici quelques autres choses que vous pourriez envisager:
réponse.setContentType("application/pdf");