Java: tex -> pdf

Hi.

Hab leider mit dem ProzessBuilder noch nie gearbeitet. Wie würde denn der Aufruf aussehen?
In etwa so?

Code:
 try
        {
            ProcessBuilder texBuilder = new ProcessBuilder("pdflatex", url);
            Process p = texBuilder.start();
            System.out.println("latex wird kompiliert");
            p.waitFor();
        }
        catch (InterruptedException ex)
        {
            System.out.println(ex.toString());
        }
        System.out.println("Fertig");
Ja, sieht gut aus. Du solltest natürlich noch den Rückgabewert des Prozesses prüfen.

Und evtl. die Standard-Ausgabe / -Fehlerausgabe lesen damit der Prozess nicht hängt weil die Ausgabepuffer voll sind.

Gruß
 
Hm, leider scheint das ganze noch nicht zu funktionieren. Er kommt bis zur Ausgabe "Latex wird kompiliert" und dann steht er. Er kommt auch nie zum Rückgabewert oder ähnlichem.

Code:
 ProcessBuilder texBuilder = new ProcessBuilder("pdflatex", url);
        Process p = texBuilder.start();
        System.out.println("latex wird kompiliert");
        try
        {
            p.waitFor();
        }
        catch (InterruptedException ex)
        {
            System.out.println(ex.toString());
        }
        
        System.out.println(p.exitValue());

edit:
muss ich hier noch irgendwie ein working-dir angeben?
 
Gut ... da hab ich mich wohl etwas verplant nur nach dem PDF gerichtet ...
Wenn man sich TeX anguckt dann sieht man wirklich das dann aus dem compileten Document ein PDF zu machen wirklich da einfachste darans ist ...

ICH HAB NICHTS GESAGT

Zum Post
Wie deepthroat bereits erwähnte solltest du auch die Streams auslesen. Das wären der ErrorStream und der OutputStream. Das Problem hatten wir schon öfters das die entsprechenden Programme stehen geblieben sind weil die Buffer dieser Streams voll waren. Ein einfachs close() hilft auch aber man sollte die Streams wirklich auslesen um Fehlermeldungen zu erhalten.
 
Perfekt. Vielen Dank! Es funktioniert nun! Anscheinend war wirklich der InputStreamBuffer voll und daher ist er stecken geblieben (oder sowas in der Art - bin in Java net ganz so fit).

Dieser Code funktioniert nun bei mir. Als nächstes werde ich ihn schnell noch unter linux testen.

Code:
 ProcessBuilder texBuilder = new ProcessBuilder("pdflatex", url, "-output-directory=" + desktop);
        texBuilder.redirectErrorStream(true);
        Process p = texBuilder.start();
        System.out.println("latex wird kompiliert");
        String tmp = null;
        String error = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

        try
        {
            while ((tmp = br.readLine()) != null)
            {
                error = error + tmp + "\n";
            }

        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }

        System.out.println(error);

        try
        {
            p.waitFor();
        }
        catch (InterruptedException ex)
        {
            System.out.println(ex.toString());
        }
        if (p.exitValue() == 0)
        {
            System.out.println("Fertig");
        }

Lg und danke an euch beiden!

EDIT:
Es kann natürlich sein, dass er Code sehr "hässlich" ist. Bin über Verbesserungen natürlich sehr froh.
 

Neue Beiträge

Zurück