Bingoman Babenco: Bei PDF-Generierung keine polnischen Sonderzeichen

Hallo Forum,
ich generiere mittels xsl-Stylesheet und FOP aus einem XML-file ein PDF. Leider werden die polnischen Sonderzeichen als Hashes (#) dargestellt.

Im xml-file encode ich mit utf-8 (<?xml version="1.0" encoding="UTF-8"?>).

Ich habe auch schon versucht den Font (Arial) einzubinden, das einbinden klappt auch aber die Zeichen werden nicht dargestellt.

Kann mir jemand helfen?
Vielen Dank

B.B.

  1. Hallo,

    ich generiere mittels xsl-Stylesheet und FOP aus einem XML-file ein PDF. Leider werden die polnischen Sonderzeichen als Hashes (#) dargestellt.

    Im xml-file encode ich mit utf-8 (<?xml version="1.0" encoding="UTF-8"?>).

    Ich habe auch schon versucht den Font (Arial) einzubinden, das einbinden klappt auch aber die Zeichen werden nicht dargestellt.

    Das "#" deutet aber auf fehlende Zeichen in der Schrift hin.
    Wie hast du denn festgestellt, dass das Einbinden der Schrift im FOP funktionierte? (eventuell solltest du es mit ArialUnicodeMS versuchen).
    Ist dein XML wirklich XML, oder nur XHTML (vielleicht mit HTML-Entities)?

    Grüße
    Thomas

    1. Hallo Thomas,

      Wie hast du denn festgestellt, dass das Einbinden der Schrift im FOP funktionierte? (eventuell solltest du es mit ArialUnicodeMS versuchen).

      Ich habe zum testen eine "Georgia" genommen und das PDF hat sie dargestellt

      Ist dein XML wirklich XML, oder nur XHTML (vielleicht mit HTML-Entities)?

      Das weiß ich nicht genau.
      Ich habe in der xml-Datei oben folgendes reingeschrieben:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html [
      <!ENTITY nbsp " " >
      <!ENTITY lt "<" >
      <!ENTITY gt ">" >
      ]>
      Die Entities sind für >< und Leerzeichen

      Vielen Dank Thomas,
      hast Du vieleicht hast Du noch eine Idee

      Gruß
      BB

      1. Hallo,

        Wie hast du denn festgestellt, dass das Einbinden der Schrift im FOP funktionierte? (eventuell solltest du es mit ArialUnicodeMS versuchen).

        Ich habe zum testen eine "Georgia" genommen und das PDF hat sie dargestellt

        Dann hat die Arial, die du Verwendet hast, nicht diese Zeichen. Nimm, wie gesagt, ArialUnicodeMS (... ehmmm wir reden aber hier von in FOP/PDF eingebetteten Fonts und nicht von font-family="Arial"!)

        Ist dein XML wirklich XML, oder nur XHTML (vielleicht mit HTML-Entities)?

        Das weiß ich nicht genau.

        Wie bitte?
        Was heisst du weißt nicht genau ob deine Datei eine XHTML-Datei mit DOCTYPE etc. oder eine XML-Datei sei?

        Ich habe in der xml-Datei oben folgendes reingeschrieben:
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE html [
        <!ENTITY nbsp " " >
        <!ENTITY lt "<" >
        <!ENTITY gt ">" >
        ]>

        3 Dinge:

        • &lt; und &gt; sind in XML vordefiniert, man muss sie nicht extra definieren.
        • <!ENTITY nbsp " " > hat eine Wirkung von genau Null, weil du das "non-breaking-space" duch ein normales Leerzeichen ersetzt. Wenn schon, dann: <!ENTITY nbsp   "&#160;">
        • wenn das von oben wirklich so in deinem XML steht und auch wenn das erste Element in deinem XML tatsächlich html ist, hast du aus der Sicht des XML/XSLT-Prozessors XML.

        Aber wenn die Darstellung der polnischen Zeichen mit Georgia als Schrift im PDF funktioniert, ist es eben nur ein Problem mit der verwendeten Arial-Variante.

        Grüße
        Thomas

        1. Hallo Thomas,

          leider kenn ich mich nicht wirklich gut damit aus. Wie gesagt als Doctype steht bei mir in der xml-Datei:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE html [
          <!ENTITY nbsp " " >
          <!ENTITY lt "<" >
          <!ENTITY gt ">" >
          ]>

          Ich habe probiert das encoding schon auf iso-8859-2 umgestellt.
          Mit iso-8859-7 und griechischen Zeichen geht es auch nicht.

          Das Einbetten habe ich richtig gemacht aber bei der Georgia stellt er mir die Zeichen auch nicht dar.

          Bekommt man die ArialUnicodeMS irgendwo als freefont.

          Gruß
          BB

          1. Hallo,

            leider kenn ich mich nicht wirklich gut damit aus. Wie gesagt als Doctype steht bei mir in der xml-Datei:

            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE html [
            <!ENTITY nbsp " " >
            <!ENTITY lt "<" >
            <!ENTITY gt ">" >
            ]>

            Ich habe probiert das encoding schon auf iso-8859-2 umgestellt.
            Mit iso-8859-7 und griechischen Zeichen geht es auch nicht.

            Das Einbetten habe ich richtig gemacht aber bei der Georgia stellt er mir die Zeichen auch nicht dar.

            Kannst du einen Stück aus dem XML posten, wo polnische Zeichen dabei sind?

            Bekommt man die ArialUnicodeMS irgendwo als freefont.

            Das ist eher unwahrscheinlich, "Arial Unicode™ MS" ist spez. für Microsoft lizenziert und wird mit deren Produkten ausgeliefert.

            Aber schaue dir die Seite: http://www.alanwood.net/unicode/fonts.html an.

            Grüße
            Thomas

            1. Hi Thomas,
              erstmal vielen Dank für Deine Mühe.
              Ich bin jetzt erstmal nicht mehr an meinem Arbeitsplatz.
              Aber ich kann sagen das ich schon einiges ausprobiert habe. Als utf-8 codiert, ohne Codierung usw...

              das gleiche mit griechischer Schrift...

              ich stelle morgen den Code rein

              Grüße
              BB

              1. Hallo Thomas,
                -----------------------------------------------------------
                -----------------------------------------------------------
                Ich beschreibe hier mal wie ich einen Font für die PDF-Generierung via FOP (fop-0.20.5) eingebettet habe.

                Informationen fürs FOP über die eingebettete Schrift erzeugen. Dieses XML-File landet im lib-Verzeichnis. Eingabe im Prompt:
                C:\XSLT\fop-0.20.5-bin\fop-0.20.5>java -cp "build/fop.jar; lib/xercesImpl-2.2.1.jar; lib/xalan-2.4.1.jar" org.apache.fop.fonts.apps.TTFReader -enc ansi C:\WINDOWS\Fonts\Georgia.ttf lib/georgia.xml

                Im Fop-Verzeichnis > conf > die userconfig.xml öffnen und dort den Pfad zur Schrift und zum erzeugten Schrift-Info-xml-File angeben:

                <font metrics-file="C:\XSLT\fop-0.20.5-bin\fop-0.20.5\lib\georgia.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\Georgia.TTF">
                    <font-triplet name="Georgia" style="normal" weight="normal"/>
                </font>

                Dann das PDF erzeugen. Eingabe im Prompt:
                C:\XSLT\fop-0.20.5-bin\fop-0.20.5>fop -c conf/userconfig.xml -xml meinxml.xml -xsl meinxsl.xsl -pdf meinpdf.pdf

                -----------------------------------------------------------
                -----------------------------------------------------------

                Das nur als Information für andere, die ebenfalls Schriften einbetten wollen.

                Nur mein Problem besteht weiterhin darin, dass keine polnischen, griechischen, kyrillischen Sonderzeichen im PDF ausgegeben werden, statt der Sonderzeichen wird ein Hash# ausgegeben.

                In meinem XML-file habe ich schon mehrere encodings ausprobiert:
                <?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="iso-8859-1"?><?xml version="1.0" encoding="iso-8859-2"?>

                Und mehrer Versuche mit den Sonderzeichen, als utf-8 (która), unicode (&#261;) ohne Codierung ...

                Habe es jetzt auch mit der Arial Unicode MS probiert

                nix hat geklappt

                Gruß
                BB

                1. Hallo,

                  [...] via FOP (fop-0.20.5) [...].

                  Wenn sonst nichts dagegen spricht, ist die neuere Version 0.93 besser/eher zu empfehlen.

                  Nur mein Problem besteht weiterhin darin, dass keine polnischen, griechischen, kyrillischen Sonderzeichen im PDF ausgegeben werden, statt der Sonderzeichen wird ein Hash# ausgegeben.

                  In meinem XML-file habe ich schon mehrere encodings ausprobiert:
                  <?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="iso-8859-1"?><?xml version="1.0" encoding="iso-8859-2"?>

                  Und mehrer Versuche mit den Sonderzeichen, als utf-8 (która), unicode (&#261;) ohne Codierung ...

                  Dann stellt sich mir die Frage ob die Datei die du mit encoding="utf-8" gespeichert hast, auch _wirklich_ als UTF gespeichert wurde?
                  Deine hineinkopierte "(która)" (eigentlich: ą) deutet eher daraufhin, dass die Datei nur als ANSI aber nicht als UTF8 gespeichert wird.

                  Aber wenn du die nummerischen Entities wie &#261; verwendest, sollte die Encoding an sich egal sein.
                  Ich kann jedenfalls das Problem so nicht nachvollziehen (weshalb ich dich ja um ein Stück aus deinem XML gebeten habe).

                  Grüße
                  Thomas

                  1. Thomas

                    Hi Thomas,
                    ich habe Dir eine Mail mit meinen ("sensiblen") Daten geschickt, wenn Du dafür keine Zeit hast , hätte ich vollstes Verständniss.

                    Wie müssen denn die Sonderzeichen im xml-file stehen für die versch. Landessprachen (Kyrillisch, griechisch, polnisch usw...)?

                    Danke und Grüße
                    BB

                    1. Nach weiteren Versuchen mit der ArialUnicode erzeugt FOP ein PDF, welches sich nicht öffnen läßt. "There was an error opening this document. Could not repair file".

                      BB

                      1. Hi Thomas,

                        Nach 3 Tagen endlich ein Ergebnis mit der ArialUnicode.
                        Bei der Generierung des arialuni.xml lag der Fehler.

                        statt:
                        C:\XSLT\fop-0.20.5-bin\fop-0.20.5>java -cp "build/fop.jar; lib/xercesImpl-2.2.1.jar; lib/xalan-2.4.1.jar" org.apache.fop.fonts.apps.TTFReader -enc ansi C:\WINDOWS\Fonts\arialuni.ttf lib/arialuni.xml

                        so:
                        C:\XSLT\fop-0.20.5-bin\fop-0.20.5>java -cp "build/fop.jar; lib/xercesImpl-2.2.1.jar; lib/xalan-2.4.1.jar" org.apache.fop.fonts.apps.TTFReader C:\WINDOWS\Fonts\arialuni.ttf lib/arialuni.xml

                        das "-enc ansi" rausnehmen

                        Danke nochmal
                        BB

                        1. Hallo,

                          Nach 3 Tagen endlich ein Ergebnis mit der ArialUnicode.
                          Bei der Generierung des arialuni.xml lag der Fehler.

                          Bedeutet das, dass das Problem nun gelöst ist?

                          Grüße
                          Thomas

                          1. Hallo,

                            Nach 3 Tagen endlich ein Ergebnis mit der ArialUnicode.
                            Bei der Generierung des arialuni.xml lag der Fehler.

                            Bedeutet das, dass das Problem nun gelöst ist?

                            Grüße
                            Thomas

                            Ja,
                            in der Testumgebung klappt es, jetzt muß ich es nur noch mit dem CMS zusammen bringen

                            Danke nochmals

                            BB