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

Schreibe einen Kommentar