Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > BBCode-Addon für fpdf
Antwort
 
Themen-Optionen
Alt 02.12.2007, 10:44   Nach oben    #1
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
Standard BBCode-Addon für fpdf

Wie sicherlich einige schon wissen, bastle ich gerne immer wieder mal PDF zusammen. Am liebsten dann natürlich mit der PHP-Klasse fpdf.
Dafür existieren auch eine Menge Add-Ons, jedoch leider keine, die BBCodes (z.B. aus einer db) so in Form bringt, dass man sie mit der Klasse verarbeiten könnte.

Genau daran möchte ich mich nun versuchen!

Ich bin leider noch nicht sehr geübt, wenn es darum geht aus dem nichts eine neue Klasse zu zaubern, daher hier der thread.


Meine Frage lautet:
Wie kann/muss/sollte/... ich anfangen?


Die BBCodes müssen erkannt werden; das ist kein Problem (denke ich).

Doch im Gegensatz zur Verarbeitung durch HTML, wo alles einfach als ein langer string anschließend ausgegeben wird, bedarf es hier der Verarbeitung durch die Klasse fpdf.


Daher bin ich da gerade völlig ideenlos, wie man da anfangen könnte.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 11:22   Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Na ja. Üblicherweise geht man bei solchen Problemen wie folgt vor:

Du schreibst einen Lexer, der zwischen BBCodes und normalem Text unterscheiden kann und passende Token produziert. Die fütterst du an einen Parser, der überprüft, ob die Tags in der richtigen Reihenfolge sind und alles hübsch valide ist und am besten gleichzeitig einen AST (Abstract Syntax Tree) baut, den du schließlich und letztlich über einen TreeWalker abarbeitest und dabei Aktionen ausführst, um dein PDF zu generieren.

Für Java würde ich dir nun antlr empfehlen, aber der PHP-Port davon ist nicht besonders weit (d.h. nichtmal ansatzweise fertig...), von daher müsstest du das von Hand schreiben. Ist nicht so schwierig, wenn man's denn kann. Ich hab nen Teil der antlr-API nach PHP portiert, den könnte ich dir zukommen lassen, wenn du's versuchen willst (da ist'n Beispiel bei).

Ist halt relativ schwierig, wenn man's nicht kann. Eventuell kannst du auch'n Quick'n Dirty-Approach nehmen und via preg_match_all sowas ähnliches aufbauen. Könnte theoretisch funktionieren. Vielleicht reicht auch preg_split (oder wie das hieß).
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 11:27   Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Zitat:
Üblicherweise geht man bei solchen Problemen wie folgt vor
Hier geht es aber nicht um einfachen HTML-Code, sondern um FPDF und da ist das Verhalten doch etwas anders.
Da wird es etwas komplexer
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 13:14   Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Lies nochmal, was ich geschrieben habe, und gewöhn dir an, nicht nach dem ersten Satz abzubrechen... dann stellst du vielleicht fest, dass ich nicht die Variante beschrieben habe, bei der man bbcodes durch reguläre Ausdrücke in HTML umwandelt, sondern eine, die den Weg über Parser und AST geht und den Text "interpretiert", um die Ausgabe zu erzeugen...
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 15:12   Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

Ich würde vorschlagen du nimmst PEAR Text_Wiki mit BBCode Erweiterung. Mit Text_Wiki kann man seine eigenen Parser und Renderer schreiben.

Du müsstest vielleicht garkeinen Parser für BBCode schreiben, sondern lediglich die entsprechenden Renderer Klassen. In den Renderern Klassen zu jeder Formatierung, stehen dir dann die einzelnen Inhalte zur Verfügung.

Text_Wiki ist schon so gebaut das man den Wiki Code später in irgendwas beliebiges rendern wie PDF oder Latex. Die Weichen sind zwar gestellt aber gemacht wurde bisher glaube ich nur XHTML.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 15:37   Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Es geht nur darum, einen Text mit BBcode (wie hier im Forum) durch eine Klasse zu schicken, um aus dem Text ein PDF zu erzeugen. Es gibt ähnliche Klassen wie z.B. HTML2PDF, aber die arbeiten nicht so toll. Und es wäre Schwachsinn ersten den Text von BBcode in HTML umzuwandeln und dann in PDF auszugeben. Eine Lösung von BBcode zu FPDF ist gesucht, und das ohne zusätzliche Umwege.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 19:12   Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

In den Rendereren stehen doch die einzelnen String Bausteine zur Verfügung und dort nutzt man cell() Befehle. Da ist kein Umweg über HTML.

Wahrscheinlich muss das alles irgendwie gewrapped werden damit das FPDF Objekt an jeden Renderer übergeben wird.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 19:41   Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Naja die Befehle mit Cell() nutzen nicht soviel.
Mein Grundgedanke sieht jetzt so aus:
http://www.mediacix.de/code/BBcode-m...-136-code.html
(ist nicht perfekt, nur wilde zusammen gehackt)

Dabei wird die benutze Klasse auf die bisherige von FPDF aufgesetzt.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 19:59   Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Dir ist klar, das wir hier Vorschläge zur Implementierung der Klasse machen und nicht zu der API, mit der die hinterher angesprochen wird, oder? Davon abgesehen: "Favor composition over inheritance".

Wenn ich ex3 richtig interpretiere ist ihm ne API bekannt, die das, was ich vorgeschlagen habe (Lexer,Parser,AST) übernimmt, so das man nur noch die Ausgabe erledigen muss.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.12.2007, 20:13   Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Habt ihr euch mal die bisherige FPDF-Klasse angeschaut ?
Und mit der muss es laufen.
Wer eine Lösung hat, kann diese gern posten - wahrscheinlich, eventuell führen zu keiner Lösung.

Die Sache mit Text_Wiki muss ich selber erstmal austesten, um darüber mir eine Meinung zu bilden. Da aber eh alles angepasst werden muss, kann ich auch gleich selber ne Klasse tippen.

Wenn es so einfach wäre wie in HTML gäbe es diesen Thread gar nicht
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.12.2007, 12:22   Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

Die Doku zum bauen eigener Parser und Renderer ist etwas dürftig. Aber wenn man das Prinzip verstanden hat und sich an den einfachen HTML Parser und Renderer orientiert (strong, img, h1, etc.) kann man gut seine eigenen Wiki Code entwerfen.

Statt in den Renderern return $str zu machen macht man halt die jeweiligen FPDF Befehle die man braucht.

Man erstellt das Text_Wiki Objekt und macht dann setRenderConf(). Statt einer CSS Klasse wie es da üblich ist übergibt man stattdessen das FPDF Objekt, was dann in jedem Renderer verfügbar ist.

Ich würde es mal antesten, wenn da nämlich was gescheites dabei rauskommt kann man sich die ganze (wohl erforderlichen) Dinge von Pago sparen.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.12.2007, 13:44   Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 588
Standard

Naja du kannst gerne mal testen
Ich finde es nur zu umständlich, liegt vielleicht auch daran das ich mir das noch nicht so genau angesehen habe - werd ich aber nachholen.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.12.2007, 15:23   Nach oben    #13
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
Standard

@pago: dein Weg klingt so, als wäre er ziemlich aufwendig, auch wenn das was ex³ geschrieben so klingen soll, wie das, was du geschrieben hast.

Mir wäre das derzeit noch eine Nummer zu heftig.


btw: ich habe natürlich vorher im fpdf-Forum gefragt:
http://www.fpdf.de/forum/showthread.php?t=2009
das will ich euch nicht vorenthalten.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[url] BBCode Garnele PHP-Programmierung 11 03.12.2007 18:52
BBCode "noparse" Jann Hendrik PHP-Programmierung 14 03.12.2007 18:48
FPDF / eMail mit PDF verschicken Error123 PEAR, PECL und Frameworks 11 16.08.2007 16:51
FPDF 3 Klassen für 3 Dokumente-Arten ex³ PHP-Programmierung 9 21.02.2006 19:15
Problem mit dem verlinken innerhalb von pdf-Dokumenten wegen der Nutzung von BBCode Jann Hendrik PHP-Programmierung 3 10.02.2006 16:27


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:35 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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 36 37 38 39 40 41 42 43 44