Comment montrer java (jsf) générés directement le fichier pdf dans adobe reader
je suis en utilisant JSF 2.0 (Eclipse IDE) et j'ai une méthode dans un de mes haricots qui génère des fichiers PDF à l'aide d'Apache FOP 1.0. Lorsque je clique sur "makePDF" bouton sur ma page JSF, PDF généré s'ouvre dans la MÊME fenêtre de ma page (et je dois utiliser le bouton "retour" après que j'ai vue/enregistrer/imprimer PDF).
Je peux le modifier de manière à ce que lorsque "makePDF" bouton est enfoncé, pop-out boîte de dialogue s'affiche et me demande si je veux enregistrer le fichier ou l'ouvrir avec adobe reader.
Est-il possible que, lorsque je clique sur mon "makePDF" bouton, PDF généré est directement ouvert dans adobe reader (et j'ai encore ma page JSF et n'ont pas besoin de confirmer quoi que ce soit) ??? Aussi (ce n'est pas vraiment nécessaire, mais bon à savoir), il est un moyen pour l'ouvrir dans une nouvelle fenêtre ou l'envoyer directement à l'imprimante?
Ici est la partie principale de mon code (j'ai supprimé quelque chose sans pertinence) :
public void makePDF(long contractId, int documentType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String basePath = externalContext.getRealPath("/");
try {
fopFactory.setUserConfig(new File(basePath + "/pdf_transform/config/userconfig.xml"));
fopFactory.setBaseURL(basePath);
fopFactory.getFontManager().setFontBaseURL(basePath);
} catch (Exception e) {
e.printStackTrace();
}
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
foUserAgent.setBaseURL(fopFactory.getBaseURL());
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-disposition", "attachment");
BufferedOutputStream output = null;
try {
output = new BufferedOutputStream(response.getOutputStream(), 10240);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, output);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltfile));
Source src = new DOMSource(makeXML(contract)); //my method
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
} catch (Exception e) {
e.printStackTrace();
}
facesContext.responseComplete();
}`
Quand j'enlève response.setHeader("Content-disposition", "attachment");
il s'ouvre dans la même fenêtre, sinon il me demande de l'enregistrer ou l'ouvrir.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
L'ouverture d'une demande dans une nouvelle fenêtre n'est pas directement une JSF préoccupation. C'est plus un HTML préoccupation.
Ajouter
target="_blank"
à la formeet il va soumettre la demande dans un nouvel onglet/fenêtre.
De l'envoi à l'imprimante du client directement n'est pas possible sans introduire un morceau de code qui s'exécute côté client de l'homme du milieu, comme une applet.
J'ai eu un problème similaire et heureusement trouvé un moyen élégant pour le résoudre. Si quelqu'un a une meilleure solution, alors s'il vous plaît laissez-moi savoir.
Cas d'utilisation:
L'utilisateur entre des données dans un JSF généré forme nécessaire pour la création de PDF (PDF est généré à partir d'une servlet). Si la validation échoue, les messages d'erreur sont rendus, mais si tout va bien fichier pdf s'ouvre dans une nouvelle fenêtre.:-)
Ma solution:
Dans un modèle.xhtml (ou le site qui définit facelets) entrée:
Votre commande lien dans le programme JSF-forme de points de méthode d'action dans myBean (par ex. myBean.showPdf())
Espère que cela aide quelqu'un..
si vous voulez ouvrir un fichier PDF directement, pls utiliser