Ich benutze JSF 2.0 (Eclipse IDE) und ich habe eine Methode in einer meiner Bohnen, die einige PDF-Dateien mit Apache FOP 1.0 generiert. Wenn ich auf der JSF-Seite auf die Schaltfläche "makePDF" klicke, wird die generierte PDF-Datei im GLEICHEN Fenster geöffnet, in dem sich meine Seite befindet (und ich muss die Schaltfläche "Zurück" verwenden, nachdem ich PDF angesehen/gespeichert/gedruckt habe).Wie man java (jsf) erzeugt pdf direkt in AdobeReader
Ich kann dies so ändern, dass beim Drücken der Taste "makePDF" der Popup-Standarddialog erscheint und fragt, ob ich die Datei speichern oder mit AdobeReader öffnen möchte.
Gibt es eine Möglichkeit, dass, wenn ich auf meine "makePDF" -Schaltfläche klicke, generierte PDF direkt in AdobeReader geöffnet wird (und ich habe immer noch meine JSF-Seite und brauche nichts zu bestätigen) ??? Auch (es ist nicht wirklich notwendig, aber gut zu wissen), gibt es eine Möglichkeit, es in einem neuen Fenster zu öffnen oder direkt an den Drucker zu senden?
Hier ist der Hauptteil meines Codes (i gelöscht einige irrelevant Zeug):
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();
}`
Wenn ich response.setHeader("Content-disposition", "attachment");
entfernen Sie sie im selben Fenster öffnet, sonst ist es fragt mich oder offen zu speichern.
Vielen Dank im Voraus.
Danke, das habe ich in Ihrem PDF-Handling-Artikel verpasst, weil ich mich nur auf Java-Code konzentriert habe :) Trotzdem beantwortet das meine Hauptfrage nicht, dh kann ich direkt in AdobeReader öffnen (nicht im Fenster) oder ich habe um meinen Ansatz zu ändern? – Nikola
Das ist eine Browsereinstellung, die Sie nicht kontrollieren können. In Firefox zum Beispiel, überprüfen Sie * Extras> Optionen> Anwendungen *. – BalusC
Wusste das nicht, danke. Obwohl es sich herausstellte, dass es nicht wirklich jsf/fop war, löste es mein Problem. – Nikola