# LaTeX Code in dynamisch erzeugten PDF's



## sonic29 (4. Jul 2011)

Hallo,

folgendes Problem:
ich habe LaTeX Code in einem String vorliegen und möchte diesen Code kompiliert in dynamisch erstellten PDF's anzeigen lassen. 

Das Anzeigen eines PDF's klappt dank der Library iText ( iText ® - Free / Open Source PDF Library for Java and C# )
Doch die entsprechenden Stellen mit LaTeX Code werden unkompiliert angezeigt.
Bspw. wird dann der Code selbst angezeigt: 
"Bestimmen Sie die xyz! 
\begin{equation}
\psi (u) = \int_{o}^{T} \left[\frac{1}{2}
\left(\Lambda_{o}^{-1} u,u\right) + N^{\ast} (-u)\right] dt \;  .
\end{equation}"
... und nicht die mathematische Formel.

Es handelt sich um eine Webanwendung. In den JavaServerPages habe ich mit Hilfe von MathJax ( http://www.mathjax.org/ ) das Kompilieren von LaTeX Code hinbekommen, so dass auf den JSP's der LaTeX Code kompiliert angezeigt wird. Mit MathJax kriege ich es aber nicht hin, den Code der PDF's zu kompilieren.

Hat jemand eine Idee? 

Viele Grüße


----------



## Dekker (4. Jul 2011)

MathJax kompiliert das ganze ja auch für JavaScript, nicht für PDFs. Denke für PDFs wirste pdftex oder so aufrufen müssen.


----------



## sonic29 (4. Jul 2011)

Soweit ich weiß ist pdftex ja ein eigenständiges Programm, das zur Erzeugung von PDF Dateien dient. Gibt es dazu eine entsprechende oder ähnliche Java Library? 

Andernfalls hätte ich auf jeden Fall Probleme pdftex in Java dynamisch aufzurufen und davon Gebrauch zu machen. Geht das überhaupt?


----------



## faetzminator (5. Jul 2011)

Vielleicht jPicEdt for LaTeX? Aber habs noch nie gebraucht.


----------



## AlexSpritze (5. Jul 2011)

Hm, also wenn du schon LaTeX Code hast, dann kannst du doch den ganzen Text in LaTeX ausgeben lassen. Du rufst also den pdf[la]tex auf:


```
Runtime r = Runtime.getRuntime();
Process p = r.exec("\"pfadZuPdf[la]tex\" \"pfadZurInputfile}\"");
p.waitFor(); // warten bis der Process fertig ist
```

Musst dann nur schauen, wo er dir die PDF hinspeichert. Aber das kann man sicherlich über weitere Optionen an pdf[la]tex angeben.


----------



## sonic29 (5. Jul 2011)

faetzminator hat gesagt.:


> Vielleicht jPicEdt for LaTeX? Aber habs noch nie gebraucht.



Das hört sich vielversprechend an. Werde ich mir nachher mal genauer ansehen. Ist nur die Frage zu welchem Zeitpunkt man einen Screenshot macht. 




AlexSpritze hat gesagt.:


> Hm, also wenn du schon LaTeX Code hast, dann kannst du doch den ganzen Text in LaTeX ausgeben lassen. Du rufst also den pdf[la]tex auf:
> 
> 
> ```
> ...



Hier ist wohl das Problem, dass es eine Webanwendung ist und der Benutzer dann jedes Mal wenn er auf einem anderen Rechner arbeitet den Pfad zu PDFtex auswählen muss. Im Grunde genommen wäre es besser, wenn er selbst solch ein Programm gar nicht braucht.

Schonmal vielen Dank für eure Ideen. Viele Grüße


----------



## faetzminator (5. Jul 2011)

sonic29 hat gesagt.:


> [...] eine Webanwendung ist und der Benutzer dann jedes Mal wenn er auf einem anderen Rechner arbeitet den Pfad zu PDFtex auswählen muss. Im Grunde genommen wäre es besser, wenn er selbst solch ein Programm gar nicht braucht.



Wenn es ein Applet ist, läuft der Code auf dem Client und der User benötigt eine solche Lib. Wenn es allerdings eine Hosted Java App (Websphere, Tomcat, ...) ist, dann läuft der Code sowieso auf dem Server und das externe Programm ist nur auf dem Server notwendig.


----------



## sonic29 (6. Jul 2011)

Mein jetziger Stand ist so, dass ich die Bibliothek JLatexMath (JLaTeXMath - A Java API to render LaTeX - A Java package to display LaTeX code in mathematical mode) genommen habe und vom jeweiligen LaTeX Code ein BufferedImage erstelle, welches dann dem PDF zugefügt wird. Die Qualität des Bildes lässt aber zu Wünschen übrig und kann auf gar keinen Fall so bleiben. siehe Screenshot: 
ImageShack® - Online Photo and Video Hosting

Folgender Code habe ich momentan:

```
TeXFormula formula = new TeXFormula(latex);
TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 10);
icon.setInsets(new Insets(10, 10, 10, 10));
BufferedImage image = new BufferedImage(icon.getIconWidth(),  icon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR );
Graphics2D g2 = image.createGraphics();
g2.setColor(Color.white);
g2.fillRect(0, 0, icon.getIconWidth(), icon.getIconHeight());
JLabel jl = new JLabel();
jl.setForeground(new Color(0, 0, 0));
icon.paintIcon(jl, g2, 0, 0);
doc.add(Image.getInstance(image, null));
```

Lässt sich da etwas drehen, damit die Qualität verbessert wird? Oder liegt es evtl. an iText, dass die Qualität von Bildern in den PDF's eher schlecht ist? 
Hat jemand eine bessere Idee die LaTeX Elemente in das PDF zu bekommen?

Grüße


----------



## sonic29 (6. Jul 2011)

Ich habe eben mal ein anderes Bild ohne die JLatexMath Lib zum PDF hinzugefügt und die Qualität ist ähnlich mies wie bei dem LaTeX Beispiel.

Also liegt es wohl an iText, dass die Qualität zu Wünschen übrig lässt. Bzw. weiß ich nicht wie man jetzt die Bildqualität verbessert. iText ist ja durchaus in der Lage Bilder mit exzellenter Qualität dem PDF hinzuzufügen, wie man an diesem Beispiel sehen kann: iText in Action: example part3.chapter10.ImageTypes

Frage: Wie verbessere ich nun die Bildqualität?


----------

