# pdf aus Jar File öffnen, das über Webstart verteilt wurde



## erazor85 (17. März 2008)

Hi,

ich habe ein problem mit einem java prog, das über webstart verteilt wird.
es hat folgende struktur:

client.jar (alle klassen, die der client braucht)
res.jar (verschiedene pdfs, liegen direkt im root des jars)

mein problem ist nun, dass ich an das *res.jar* nicht rankomme vom client aus.
da bei webstart die files ja in einem cache (c:\doku...\username\anwendungsdaten\sun\....) gespeichert werden kommt man da nicht ohne weiteres hin. wenn ich den client ausführe ist das user.dir auf das verzeichnis des webbrowsers gesetzt (c:\programme\mozilla firefox). 

meine frage: gibt es eine möglichkeit an die pdfs ranzukommen?

meine jnlp datei sieht so aus (der resources teil):

```
<resources>
      <j2se version="1.5+"/>
      <jar href="res.jar"/>
      <jar href="client.jar"/>
</resources>
```

wie komme ich nun an das res.jar bzw. die pdfs ran?

der client an sich und auch das laden der res.jar funktionieren einwandfrei.

danke im voraus für eure mühe

grüße
erazor


----------



## christianullenboom (22. März 2008)

Wenn du es zum Beispiel mit der Desktop-API öffnen möchtest, bleibt dir nichts übrig, als aus dem Jar die PDF in ein Temp-File (http://www.exampledepot.com/egs/java.io/CreateTempFile.html) zu kopieren und dann mit diesem Pfad den PDF-Viewer aufzurufen.

Schöne Ostern

 Christian


----------



## Thomas Darimont (22. März 2008)

Hallo,

da gäbs noch eine andere Möglichkeit ;-)

Schaut mal hier:

```
/**
 * 
 */
package de.tutorials;

import java.awt.Desktop;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.concurrent.TimeUnit;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

/**
 * @author Thomas.Darimont
 * 
 */
public class StreamPDFExample {

    public final static String PDF_DOCUMENT_LOCATION = "TelecommunicationsForecasting.pdf";
    public final static int WEB_SERVER_PORT = 4711;

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        HttpServer httpServer = HttpServer.create(new InetSocketAddress(
                WEB_SERVER_PORT), 0);
        httpServer.createContext("/", new HttpHandler() {
            public void handle(HttpExchange httpExchange) throws IOException {
                httpExchange.getResponseHeaders().add("Content-type",
                        "application/pdf");

                httpExchange.sendResponseHeaders(200, 0);

                OutputStream outputStream = httpExchange.getResponseBody();

                InputStream inputStream = getClass().getClassLoader()
                        .getResourceAsStream(PDF_DOCUMENT_LOCATION);

                transfer(inputStream, outputStream);

                outputStream.close();

            }
        });
        httpServer.start();

        Desktop.getDesktop().browse(
                new URI("http://localhost:" + WEB_SERVER_PORT));

        TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);

    }

    protected static long transfer(InputStream source, OutputStream destination)
            throws IOException {
        final byte[] buffer = new byte[16384];
        long bytesSent = 0;
        for (int len = source.read(buffer); len > 0; len = source.read(buffer)) {
            destination.write(buffer, 0, len);
            bytesSent += len;
        }
        destination.flush();
        return bytesSent;
    }

}
```
PDF Files im jar nesten und dann via (seit Java 6 verfügbarem) Webserver zum "Client" Browser / PDF Reader streamen.

Gruß Tom


----------

