ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
808
808
EMPFEHLEN
-
Hi,
ich habe folgendes Problem.
Ich brauche eine Möglichkeit aus einer .tex Datei eine pdf Datei zu erzeugen. Unter Windows funktioniert das eigent. schon ganz gut, jedoch brauche ich eine Plattformunabhängige Lösung.
Windows Lösung:
Code :1 2 3 4 5 6 7 8
try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("cmd /c start pdflatex -output-directory=\""+desktop+"\""+" \""+template+"\""); int exitVal = proc.waitFor(); System.out.println("Process exitValue: " + exitVal); } catch (Throwable t) { t.printStackTrace(); }
Lg
-
17.05.11 09:25 #2SE Tutorials.de Gastzugang
Also ich würde wenn es sowas gibt eine PDF-Lib für Java verwenden. Ich weis aber nicht ob es reine Java-Implementierungen gibt oder nur welche mit C-Lib's ... müsste man mal googlen
-
Hi,
vielen Dank für die schnelle Antwort.
Hättest du irgendwelche Links für mich?
Für Java hab ich schon sehr oft gegooglet aber leider überhaupt nichts gefunden.
Wir würde ich denn eine C-Lib in Java verwenden?
Lg
-
17.05.11 09:32 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Es gibt keine Latex-PDF Bibliothek. Latex ist doch ein relativ komplexes System welches nicht aus einem einzelnen Programm / Datei besteht.
Verwende doch einfach den ProzessBuilder und verzichte auf den Aufruf von cmd - das brauchst du doch gar nicht.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
17.05.11 09:47 #5SE Tutorials.de Gastzugang
Also Google liefert bei dem hier "java pdf lib" gleich als ersten Eintrag die Seite http://itextpdf.com
Ich habs mir nicht genau angesehen aber es ist eine Lib die es für Java und C# gibt. Die Java-Lib sieht mir nach einer reinen Java-Implementierung aus ... also Plattformunabhängig.
Damit solltest du dich vielleicht mal näher beschäftigen.
-
Hi.
Hab leider mit dem ProzessBuilder noch nie gearbeitet. Wie würde denn der Aufruf aussehen?
In etwa so?
Code :1 2 3 4 5 6 7 8 9 10 11 12
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");
Edit:
Danke an SPiKEe. Ich werde es mir mal näher anschauen.
Lg
-
17.05.11 09:55 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
17.05.11 09:58 #8SE Tutorials.de Gastzugang
Das ist vollkommen richtig =) aber aufklären lass ich mich immer gerne.
-
17.05.11 10:02 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
iText scheint eine Lib zu sein, mit der ich PDF erzeugen kann. Leider muss der Latex Code ja kompiliert werden. Daher wird es wahrscheinlich keinen anderen Weg geben, also extern pdflatex aufzurufen, da sonst die ganzen Tex Packete in Java implementiert werden müssten.
Also werd ich mal bei meinem Ansatz des Prozess Builders weitergucken! Bin für jede Hilfe dankbar
Lg
-
17.05.11 10:04 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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 :1 2 3 4 5 6 7 8 9 10 11 12 13
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?
-
17.05.11 10:19 #13SE Tutorials.de Gastzugang
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
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.
Ähnliche Themen
-
Neue Version des Java Plugins in Java SE 6 Update N Early Access
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 01.05.08, 13:38 -
java.sun.com Artikel zeigt die neuen Features für Java on the Desktop von Java 6
Von Thomas Darimont im Forum Java Technology NewsAntworten: 1Letzter Beitrag: 17.02.07, 18:39 -
COM4J eine alternative Java - COM Bridge mit Java 5 Mitteln
Von Thomas Darimont im Forum Java Technology NewsAntworten: 0Letzter Beitrag: 10.10.06, 17:49 -
Java is Hot! Java News - Java Polis 2005
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 03.12.05, 16:23 -
Rendering Performance von Java 2D / Swing verbessern unter Java 5
Von Thomas Darimont im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 06.02.05, 00:58





Zitieren

Login





