# pdf Datei speichern



## krackmoe (13. Jan 2011)

Ich erstelle mir selber in einem Servlet ein pdf mit IText.

Jetzt möchte ich, dass dieses pdf auf meinem Server gespeichert wird, sobald es erstellt wird.

Wie mach ich denn das?

Einfach File newPdf = new File(neueDatei.pdf)!?

Oder muss ich das über nen FileWriter machen und die Datei auffüllen!?
Aber das klappt ja nicht bei einem pdf denk ich mir?


----------



## SlaterB (13. Jan 2011)

kommt auf alle Umstände an, was du an Daten hast und was sonst möglich ist,
iText dürfte doch einen InputStream erwarten und einen OutputStream befüllen,
diesen OutputStream musst du in eine Datei leiten, bisschen Code wäre günstig


----------



## krackmoe (13. Jan 2011)

```
final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        documentBuilderFactory.setValidating(false);
        DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
        builder.setEntityResolver(FSEntityResolver.instance());
        HttpClient httpClient = new HttpClient();
        GetMethod getMethod = new GetMethod("irgendeine url von der eine pdf .jsp vorlage geholt wird");
        Cookie[] cookie = hsr.getCookies();
        //muss jsessionid dranhängen, da sonst in der .jsp die session.getAttribute nicht umgewandelt werden können und nur null values drinstehen würden
        getMethod.setRequestHeader("Cookie", "JSESSIONID="+cookie[0].getValue());
        httpClient.executeMethod(getMethod);
        org.w3c.dom.Document document = builder.parse(getMethod.getResponseBodyAsStream());
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ITextRenderer renderer = new ITextRenderer();
        
        renderer.setDocument(document, null);
        renderer.layout();
        renderer.createPDF(baos);
        baos.close();
```


----------



## SlaterB (13. Jan 2011)

du hast also einen   ByteArrayOutputStream bzw. den schon geschlossen und dann ein byte[],
jetzt musst du allein diese Daten speichern, ganz egal ob ein PDF drin ist oder sonst etwas,

in eine Datei schreibt man byte mit FileOutputStream, suche im Internet nach Beispielen,

du  könntest dem Renderer auch gleich einen FileOutputStream übergeben, und sparst dir den Rest,
dann müsstest du wahrscheinlich lediglich in Zeile 13 2x den Klassennamen austauschen, wobei dieser Stream sicher noch ein File im Konstruktor braucht oder ähnliches, doch wieder nach Beispielen suchen


----------



## krackmoe (13. Jan 2011)

Danke, schau ich mir dann an! Geb dir dann Bescheid


----------

