Wie um zu zeigen, java (jsf), die erzeugte pdf-Datei direkt im AdobeReader
ich bin mit JSF 2.0 (Eclipse IDE) und ich habe eine Methode in einem meiner Bohnen, die erzeugt PDF-Dateien mithilfe von Apache FOP 1.0. Wenn ich auf "makePDF" - Taste auf meiner JSF-Seite erzeugt PDF öffnet sich im GLEICHEN Fenster, wo meine Seite ist (und ich mit 'zurück' - button, nachdem ich anzeigen/speichern/drucken PDF).
Ändern kann ich dies in einer Weise, dass, wenn "makePDF" - Taste gedrückt wird, wird das standard-pop-out-dialog erscheint und fragt mich, ob ich wünschte, in Datei speichern oder öffnen mit dem AdobeReader.
Gibt es eine Möglichkeit, dass, wenn ich auf meine "makePDF" - Taste, die erzeugte PDF-Datei wird direkt geöffnet im AdobeReader (und ich habe immer noch meine JSF Seite und brauchen nicht, nichts zu bestätigen) ??? Auch (es ist nicht wirklich nötig, aber gut zu wissen), gibt es einen Weg, um es zu öffnen in einem neuen Fenster oder senden Sie es direkt an Drucker?
Hier ist der wichtigste Teil von meinem code den ich gelöscht einige irrelevante Sachen) :
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 entfernen response.setHeader("Content-disposition", "attachment");
es öffnet sich im gleichen Fenster, sonst fragt mich " speichern oder öffnen.
Vielen Dank im Voraus.
InformationsquelleAutor Nikola | 2010-12-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du eine Anfrage in einem neuen Fenster ist nicht direkt ein JSF Sorge. Es ist mehr eine HTML-Sorge.
Hinzufügen
target="_blank"
auf die formund es werde die Anfrage in einem neuen tab/Fenster.
Senden an den client-Drucker direkt ist nicht möglich ohne die Einführung von einigen Stück code, das läuft auf der client-Seite als Mann in der Mitte, wie ein applet.
Das ist ein browser-Einstellung, die Sie nicht kontrollieren können. In Firefox zum Beispiel, überprüfen Sie Extras > Optionen - > Anwendungen.
Wusste das nicht, danke. Obwohl es stellte sich heraus, es war nicht wirklich jsf/fop-verwandten, es ist mein problem gelöst.
Du bist herzlich willkommen.
InformationsquelleAutor BalusC
Ich hatte ein ähnliches problem und glücklicherweise fand einen eleganten Weg, um es zu lösen. Wenn jemand eine bessere Lösung, dann lass es mich wissen.
Anwendungsfall:
Benutzer gibt Daten in eine JSF generiert, form, notwendig für die PDF-Erstellung (PDF generiert von einem servlet). Wenn die Validierung fehlschlägt, Fehlermeldungen gerendert werden, aber wenn alles wird gut pdf-Datei öffnet sich in einem neuen Fenster.:-)
Meine Lösung:
In einer Vorlage.xhtml (oder die Website, die definiert, facelets) eingeben:
Ihren Befehl link in der JSF-form Punkte zu action-Methode in myBean (z.B. myBean.showPdf())
Hoffe es hilft jemand..
InformationsquelleAutor Bob45
wenn Sie möchten, öffnen Sie eine PDF-Datei direkt benutzen pls
InformationsquelleAutor cos beck