J'utilise JSF 2.0 (IDE Eclipse) et j'ai une méthode dans un de mes beans qui génère des fichiers PDF en utilisant Apache FOP 1.0. Lorsque je clique sur le bouton "makePDF" sur ma page JSF, le PDF généré s'ouvre dans la fenêtre SAME où se trouve ma page (et je dois utiliser le bouton 'retour' après avoir vu/enregistré/imprimé PDF).Comment afficher java (jsf) généré pdf directement dans AdobeReader
Je peux changer cela de manière à ce que le bouton "makePDF" soit pressé, une boîte de dialogue pop-out standard apparaît et me demande si je souhaite enregistrer le fichier ou l'ouvrir avec AdobeReader.
Y at-il une manière que, quand je clique sur mon bouton "makePDF", le pdf généré soit directement ouvert dans AdobeReader (et j'ai toujours ma page JSF et n'ai pas besoin de confirmer quoi que ce soit) ??? Aussi (ce n'est pas vraiment nécessaire, mais bon à savoir), est-il possible de l'ouvrir dans une nouvelle fenêtre ou de l'envoyer directement à l'imprimante?
Voici la partie principale de mon code (je supprimé des choses non pertinentes):
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 je supprimer response.setHeader("Content-disposition", "attachment");
ouvre dans la même fenêtre, sinon il me demande de sauver ou d'ouvrir.
Merci d'avance.
Merci, j'ai raté cela dans votre article de traitement PDF parce que je me suis concentré sur le code java seulement :) Pourtant, cela ne répond pas à ma question principale, je peux l'ouvrir directement dans AdobeReader (pas dans la fenêtre) ou changer d'approche? – Nikola
C'est un paramètre du navigateur que vous ne pouvez pas contrôler. Dans Firefox par exemple, cochez * Outils> Options> Applications *. – BalusC
Je ne le savais pas, merci. Bien qu'il s'est avéré que ce n'était pas vraiment lié à jsf/fop, cela a résolu mon problème. – Nikola