# XSL Aufruf via Java mit neuen Fonts



## Haerti (6. Nov 2008)

Hallo zusammen,

ich bin neu hier und hätte gleich mal eine Frage, ich habe eine Java-Datei und eine XSL-Datei.
Über die Java-Datei wird erfolgreich ein PDF aus der XSL-Datei generiert leider aber nur mit den Standart Schriftarten (Courier, Arial, Times, Symbol, Zapf Dingbats).

Jetzt habe ich nach längerem suchen eine Möglichkeit gefunden neue Schriftarten einzubinden,

Dort ist beschrieben, das man eine neue Schriftart mit hilfe von BaseFont einbinden kann


```
BaseFont.createFont("c:\\windows\\fonts\\Verdana.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
Font verdana = new Font(bfVerdana, 22);
document.add(new Paragraph(text, courier));
```

hierfür muss man aber folgende import angebenen:


```
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.xml.XmlParser;
```

Ich hab leider keine Ahnung wo ich diese vier Imports "com.lowagie.text" herbekomme oder was da drin steht???

Hat jemand von euch schon mal so eine neue Schriftart eingefügt, oder kennt vllt. einen anderen Weg eine neue Schriftart zu verwenden???

Mfg

Haerti


----------



## SlaterB (6. Nov 2008)

bei mir geht dieses Import und weist auf
itext-1.4.8.jar

das lässt befürchten, dass sich das nur auf iText bezieht, ein anderes Framework zur Bearbeitung von PDFs,
vielleicht kein schlechteres,

ich benutzte das aber nur am Rande, kann dazu nix sagen, 
außer dass ich auch schon mal gehört habe, dass man da Schriften ändern können soll,
von XSL habe ich das noch nicht gehört  :?


----------



## Haerti (6. Nov 2008)

Erstmal danke für die schnelle Antwort,



> bei mir geht dieses Import und weist auf
> itext-1.4.8.jar



also die itext-1.4.8.jar war bei mir nicht vorhanden, also hab ich se schnell mal runtergeladen und eingebunden.
Jetzt erkennt er zwar die Funktion BaseFront ohne Probleme aber in nächsten Zeile entsteht ein Fehler: 
( der Wert bfVeranda wird oben deklariert hab ich vergessen zu posten )


```
BaseFont bfVerdana = 
BaseFont.createFont("c:\\Windows\\fonts\\verdana.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);

//Hier ist der Fehler 
Font verdana = new Font(bfVerdana, 22);
```

Entsteht ein Fehler mit dem bfVerdana, Eclipse bringt als Fehler nur "No suggestions available", ich kann nich sehr viel damit anfangen?

Weis jmd. weiter??


----------



## SlaterB (6. Nov 2008)

au weia, das sind ja Java-Grundkenntnisse,

aber eine einfache google-Suche führt zu

BaseFont bfVerdana = BaseFont.createFont("c:\\windows\\fonts\\Verdana.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
Font verdana = new Font(bfVerdana, 22);
document.add(new Paragraph(text, courier));

http://it-republik.de/jaxenter/artikel/Java-meets-PDF-0441.html
wenn du den Artikel noch nicht kennst ist er bestimmt hilfreich,

wenn doch: steht doch groß iText drüber..


----------



## Haerti (6. Nov 2008)

Hm ok die Seite ist sehr hilfreich aber wie gesagt der Code ist der gleiche wie meiner
(Sie änderung meines Posts),  und er nimmt den Teil:


```
new Font(bfVerdana, 22);
```
 leider nicht an, kann sein das ichs einfach nich versteh aber ich komm irgendwie nich dahinter :?:  :?:  :?:


----------



## SlaterB (6. Nov 2008)

was soll denn bfVerdana sein? in Java gibts nur wenige Zauberwörter mit vorgegebener Bedeutung,
da kleingeschrieben kann es auch keine Klasse sein, was hier auch keinen Sinn machen würe,

es ist eine Variable wie so oft, und ein deinem Code ist die Variable nicht definiert,
weil die erste Zeile 

BaseFont bfVerdana = BaseFont.createFont(....);
heißen soll,
siehst du wie nun eine Variable deklariert wird?


----------



## Haerti (6. Nov 2008)

Ok das mit dem Deklarieren der Variable ist klar, jetzt hab ich meinen Code auf folgendes geändert:


```
BaseFont bfVerdana = BaseFont.createFont("c:\\Windows\\fonts\\verdana.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
Font verdana = new Font(bfVerdana, 22);
document.add(new Paragraph(text, courier));
```

sollte ja funktioneren! Der Fehler bleibt aber weiterhin und das ist es was ich nicht verstehen, da die Variable ja deklariert ist und auch vorhanden ist.


----------



## SlaterB (6. Nov 2008)

und du willst den Fehler nicht nennen?
schöne Mitarbeit..

wenn du 

import java.awt.Font;

hast, also die Standardklasse für Fonts,
dann gibts den Fehler 

> The constructor Font(BaseFont, int) is undefined

weil nämlich 

import com.lowagie.text.Font;

gemeint ist, vermute ich, damit funktionierts bei mir 


------

wenn dir Eclipse keine genaueren Fehler als 'No suggestions available' anzeigt,
dann hast du viel größere Probleme


----------



## Haerti (6. Nov 2008)

Ok danke noch mal für deine Hilfe funktioniert,


----------



## Haerti (6. Nov 2008)

Ich muss an dieser Stelle das Thema nochmal ansprechen,

die Sach mit dem BaseFont ist eine ganz gute Lösung in Verbindung mit XML, ich bräuchte es aber in
zusammenhang mit XSL-FO und da sieht das dann schon wieder anders aus.

Ich habe auch gelesen, das man mit Hilfe von FOP eine Neue Schriftart einbinden kann, ich bin nach dem folgenden Beispiel vorgegangen:

Beispiel für neue Schriftarten mit FOP.jar

hat soweit auch alles geklappt bis auf den letzen Schritt bei dem es heist das man die fop.bat ausführen soll

```
../fop-0.93/fop.bat  \
   -c  userconfig.xml \
    booktest.fo \ 
    booktest.pdf
```

1. Ich hab kein Verzeichnis fop-0.93 sondern nur die fop.jar die gepackt bleiben muss
2. Ich hab keine .pdf datei da meine Datei ja aus der Vorlage (XSL) erstellt wird.

Weis jmd. vllt. wie es geht oder hat es mal anders irgenwie geschafft??


----------

