Apache FOP - Fo to PDF
Author: nicbel
Publication Date: 11/14/2011 13:33
Hallo community,
das FOP-Modul von FirstSpirit generiert beschädigte PDF-Dateien wenn die Benennung (.name) der Einträge in einer Contentarealist bestimmte Sonderzeichen wie ein Komma oder Slash beinhalten.
Ich meine den Sectionnamen aus diesem Beispiel:
$CMS_FOR(section,st_cal)$
Sectionname in CAL: $CMS_VALUE(section.name)$
$CMS_VALUE(section)$
$CMS_END_FOR$
Wobei ich den gar nicht ausgeben möchte. Es kommt auch so zu einem Fehler.
Hat jemand eine Lösung für dieses Problem?
MFG,
Nic
-
Author: feddersen - 11/14/2011 13:35
Ja, Sie müssen für den Ausgabekanal eine passende Konvertierungsregel erstellen (alle in XML nicht erlaubten Zeichen quotieren) und dann bei der Ausgabe die convert Methode verwenden.
Also z.B. $CMS_VALUE(section.name.convert)$
0 -
Author: nicbel - 11/14/2011 14:02
Ich hatte folgende Einträge in den Konvertierungsregeln ergänzt:
0x2c=","
0x2f="/"
Aber es funktioniert dennoch nicht. Ich möchte den Namen - wie schon oben erwähnt - nicht ausgeben. Der ist völlig irrelevant. FirstSpirit oder das FOP-Modul kommen anscheinend intern nicht damit klar, wenn eine derartige Benennung vorgenommen wurde. Alle anderen Inhalte mit diesem Template funktionieren, eben nur nicht wenn diese Zeichen im Eintragsnamen der Contentarealiste verwendet wurden.
0 -
Author: feddersen - 11/14/2011 14:10
Das FOP-Modul arbeitet nur mit den Daten, die Sie mittels Vorlagen generieren. Es muss also im generierten XML ein nicht quotiertes Zeichen geben. Das können Sie einfach verifizieren, indem z.B. die Verarbeitung durch das FOP-Modul für den Ausgabekanal zeitweise deaktivieren und dann das generierte XML validieren.
Für valides XML müssen Sie folgende Zeichen quotieren:
0x3c="<"
0x3e=">"
0x22="""
0x27="'"
0x26="&"
0 -
Author: nicbel - 11/14/2011 14:24
In den Standard-Konvertierungsregeln stehen bereits folgende Einträge:
[quote]
0x3c="<"
0x3e=">"
[replace]
"<"="‹"
">"="›"
Wie geht man damit um?
0 -
Author: feddersen - 11/14/2011 14:31
0x3c="<"
0x3e=">"
und
0x3c="<"
0x3e=">"
sind identisch.
Den Replace-Teil brauchen Sie eigentlich nicht.
0 -
Author: nicbel - 11/14/2011 15:10
Ah ok, vielen Dank. Da habe ich wieder etwas dazugelernt.
Aber leider hilft das nicht bei meinem Problem:
Wenn ich die ersten beiden Einträge lösche, funktioniert es.
0 -
Author: feddersen - 11/14/2011 15:12
Wie gesagt, in einer der verwendeten Vorlagen (Absatzvorlage oder Formatvorlage) wird entweder keine Konvertierungsregel angewendet oder kein .convert aufgerufen. Wie Sie das herausfinden können, hatte ich oben beschrieben.
0 -
Author: nicbel - 11/16/2011 10:05
Ich habe alles probiert wie Sie es geschrieben haben.
Außerdem habe ich es auch mit Render und einer eigenen Formatvorlage versucht:
$CMS_RENDER(template:"cal_ausgabe",renderValue:liste)$
Es bleibt dabei, dass die Listen-Einträge mit diesen Zeichen nicht ausgewertet werden können.
0 -
Author: feddersen - 11/16/2011 10:08
Was meinen Sie mit "nicht ausgewertet"?
0 -
Author: andre - 11/16/2011 10:50
wie lautet den die Fehlermeldung?
wie Christoph schon schrieb: nicht erlaubte Zeichen muessen entsprechend encodiert werden.
0 -
Author: nicbel - 11/16/2011 11:02
Anbei die Fehlermeldung beim Generieren.
So wie ich das verstehe bricht FirstSpirit beim Auslesen des Listeneintrags ab.
0 -
Author: feddersen - 11/16/2011 11:06
fo:table-row is not a valid child element of fo:table-row.
heißt, dass das erzeugte FO-XML nicht gültig ist. Es wird innerhalb eines geöffneten <fo:table-row> Elements ein weiteres <fo:table-row> Element geöffnet wird.
Es würde helfen, wenn Sie sich das erzeugte XML mal anschauen würden. Das geht am einfachsten, indem Sie für den Ausgabekanal die Verarbeitung durch das FOP-Modul entfernen.
0 -
Author: nicbel - 11/16/2011 11:15
Genau das ist so weil er nach dem ersten setzen von <fo:table-row space-before="5mm"> versucht den Eintrag mit dem Namen "Identifizierung/Anmeldung 1" auszulesen und dann abbricht.
Anbei noch einmal die komplette Log-Datei der Seite.
Wie gesagt, wenn ich die ersten beiden Einträge "Identifizierung/Anmeldung 1" + "Identifizierung/Anmeldung 2" lösche, funktioniert es.
0 -
Author: feddersen - 11/16/2011 11:16
Dann hängen Sie doch bitte mal die generierte XML-Datei hier an.
0 -
Author: nicbel - 11/16/2011 11:56
Es ist tatsächlich eine öffnendes table-row-Tag zuviel. Ich frage mich wo das herkommt.
Wenn ich die ersten Einträge lösche ist es nicht da.
Ich habe beide XML-Dateien angehangen.
0 -
Author: feddersen - 11/16/2011 12:36
Da müssten sie die Absatz- und Formatvorlagen der beiden Absätze noch mal kritisch prüfen. Das XML, was die beiden (zusätzlich) generieren ist in sich schon nicht valide. Dort wird in Zeile 176 eine Zeile geschlossen und als nächstes eine Zelle geöffnet.
Das ganze ist aber ein Problem der Vorlagen und kein Problem des FOP-Modules. Das FOP-Module braucht valides FO-XML als Ausgangsbasis.
0 -
Author: nicbel - 11/16/2011 14:46
Ich habe das Problem gefunden. Es liegt in einem ganz anderen Bereich.
Es gibt eine Contentliste mit 2 Spalten (mod_contentlisting_col1) und eine mit 4 Spalten (mod_contentlisting_col2).
Der Redakteur hat zunächst die erste Liste benutzt und einen Eintrag erstellt, dann hat er die Vorlage gewechselt (siehe anbei den Screenshot von der Historie). Damit wurde die Absatzvorlage mod_contentlisting_col1 -> mod_contentlisting_col2 geändert, aber der bereits angelegte Eintrag basiert noch auf dem Snippet snippet_mod_contentlisting_col1.
Kann man die Vorlage des Snippets ebenfalls ändern?
0 -
Author: feddersen - 11/16/2011 14:49
Nein, den müssten Sie dann neu anlegen.
0
Please sign in to leave a comment.
Comments
18 comments