Ergebnis 1 bis 15 von 15

Thema: PDF-Ausgabe

  1. #1
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Gesicht zeigt die Zunge PDF-Ausgabe

    Hallo

    Nachdem die core-PDF-Ausgabe sehr dürftig ausfällt, habe ich pdf-template und tcpdf_ext installiert. Die CSS-Möglichkeiten von tcpdf sind aber im Vergleich zu Anderem minimal: margins, paddings und floats werden nicht umgesetzt (Beispiel unter bnol15.olgbern.ch > Syndikation pdf)

    Ich habe in meinem Selbstbau-Framework bisher immer mPDF verwendet > sehr komfortable PDF-Ausgabe mit guter CSS-Implementierung.

    mPDF liest und wertet html aus:
    include('../mpdf.php');
    $mpdf=new mPDF();
    $mpdf->WriteHTML('<p>Hallo World</p>');
    $mpdf->Output();
    exit;

    Hat jmd Erfahrung damit, das in Contao einzubauen oder einen Lösungsansatz, wie ich das einbauen könnte? Eine gute PDF-Ausgabe stünde Contao m.E. gut an ...

    Danke! Markus

  2. #2
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das klingt nicht ganz uninteressant.
    Ich werde da mal rein schauen, schließlich hat es (wie auch TCPDF) eine gemeinsame Grundlage mit FPDF.

  3. #3
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Fein!

    Beteilige mich gerne an Entwicklung und Testung, auch wenn ich im Vergleich zu den Urgesteinen ein blanker Anfänger bin...
    Markus

  4. #4
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich habe mal eine neue Erweiterung mPDF aufgebaut.
    Sie ersetzt TCPDF durch mPDF bei der Ausgabe über die Syndication-Icons.

    Bitte nicht vergessen mPDF in den Einstellungen freizugeben!

    Die Erweiterung ist noch im Beta-Stadium, hier kann getestet werden, ob das CSS wirklich deutlich besser eingebunden wird.
    Über Feedback würde ich mich freuen.

    Hier der Link zum Repository (sollte in Kürze funktionieren):
    https://contao.org/de/extension-list/view/mPDF.html
    Geändert von do_while (13.01.2015 um 07:10 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Oh, das ging aber schnell. Teste ich sehr gerne, sobald sie sichtbar ist.

    Markus

  6. #6
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Jetzt sollte die Erweiterung sichtbar sein, ich hatte vergessen, die Sprachen zu veröffentlichen. War wohl doch schon etwas spät.

  7. #7
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Erste Ergebnisse

    Einbau + Einstellungen: problemlos.

    Ohne weitere Anpassung: mpdf läuft, verwendet aber seine Standardeinstellungen > Stylesheet wird offenbar nicht geladen

    Spezifischen Font in mpdf eingebaut (font als ttf in mpdf hochladen und in config_fonts.php konfigurieren (siehe Anleitung mPDF) => funktioniert

    Testweise in mpf_HookControl.php mit Varianten gespielt:

    $pdf=new \mPDF('','A4','11pt','opensanscond',16,16,50,25,0, 0);
    Damit wird Ausgabegrösse definiert => funktioniert

    Exernes PDF einbinden als Template:
    // Import external file as Template
    $pdf->SetImportUse();
    $pdf->SetDocTemplate('files/olgbern.pdf',true);
    => funktioniert (damit könnte man sich die eine extension sparen) > Logo oben links und Fusszeile sind aus Template.

    //eigenes Stylesheet einbauen, da er im Moment offenbar header nicht liest
    $stylesheet = file_get_contents('files/event/css/olgeventpdf.css');
    $pdf->writeHTML( $stylesheet, 1 );
    $pdf->writeHTML( $strArticle, 2 );
    => funktioniert, allerdings verarbeitet mpdf offenbar nicht alle attribute obwohl es müsste ...

    Verschiedene Varianten gespielt > zu Beginn des css-files alles resetted > dann floatet er korrekt. Offenbar lädt das System das CSS des html-outputs schon ein, kann es aber offenbar nicht richtig verarbeiten.

    Interessant: padding wird verarbeitet, margin aber nicht (dieses Verhalten kenne ich sonst nicht von mPDF).

    Versucht, zusätzlichen Content am Ende hinzuzufügen (in meinem Fall Sponsorenlogos)
    $addcontent = {{insert_module::66}}; das geht nicht, wäre praktisch, wenn wie hier ein html-modul gleich so eingebaut werden könnte.

    $addcontent = '<div id="sponsorenblock"><div class="spontitel">Unsere Sponsoren</div>
    <div class="sponsors"><a href="http://www.s-sport.ch" target="_new"><img src="files/event/images/ssport.png"></a></div>
    <div class="sponsors"><a href="http://design.phi-network.ch" target="_new"><img src="files/event/images/logophi.png"></a></div>
    </div>';
    $pdf->writeHTML ($addcontent);

    css sagt > floaten, will es aber nicht. Positionieren mit position: absolute funktioniert aber!

    Ergebnis dieser Spielerei:
    ausschreibung-92.pdf

    Fazit bis jetzt: es geht noch nicht alles, aber der Fortschritt im Vgl. zu tcpdf ist gewaltig.
    Funktionalitäten Stylesheet einbinden / Template einbinden wären erwünscht, ebenso zusätzlichen code wie in obigem Beispiel.

    Im Vergleich zur Druckausgabe (auf Beispielseite via Druck-Syndication) druckt die gesamte Seite (inkl. header & footer). PDF-Syndication druckt aber m.E. nur den entsprechenden Artikel. Ist das so? Bug oder Absicht? (Link zur Beispielseite: bnol15.olgbern.ch)

    Frage: gibt es einen Weg, den reinen HTML-Stream abzufangen, welcher an mPDF ausgegeben wird. Das würde das Debugging erleichtern.

    Danke schon mal!

  8. #8
    Contao-Fan Avatar von kos
    Registriert seit
    22.06.2009.
    Ort
    Westerwald
    Beiträge
    888

    Standard

    Zitat Zitat von msol Beitrag anzeigen
    ... Im Vergleich zur Druckausgabe (auf Beispielseite via Druck-Syndication) druckt die gesamte Seite (inkl. header & footer). PDF-Syndication druckt aber m.E. nur den entsprechenden Artikel. Ist das so? Bug oder Absicht? ...
    Wobei das durchaus von Vorteil sein kann, denn nicht immer ist eine Druckausgabe der gesamten Seite gewünscht (zumindest bei mir).
    Vielleicht ließe sich das aber als Auswahlmöglichkeit integrieren?

  9. #9
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard

    Seh ich eigentlich gleich – bin nur erstaunt, dass es nicht gleich gehandhabt wird.
    Für viele Seiten auch bei Firmenkunden wäre nur Artikel und dafür Möglichkeit, vor oder nach Artikel zusätzlichen Content einzufügen, ideal.

    Wieso wird im Hook eigentlich noch tcpdf aufgerufen?

    Gruss
    Markus

  10. #10
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Im Moment ersetzt mPDF nur TCPDF.
    Die Features nehme ich aber gern auf und werde sehen, was sich da realisieren läßt.

    Da die Syndication im Artikel eingeschaltet werden kann, ist es eigentlich logisch, dass auch nur der betreffende Artikel ausgegeben wird. Das ist vielleicht auch die Ursache, warum die CSS-Dateien aus dem Header nicht komplett eingebunden werden. Ich werde das mal untersuchen ... und verbessern ... ;-)

  11. #11
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard PDF direkt aus BE ausgeben

    Hi
    Weiss, dass das nur bedingt hierher gehört:
    Versuche gerade, Mitgliederliste als PDF auszugeben, scheitere aber daran. Ich habe dan ganzen Tag gesucht und keine Hinweise gefunden.

    Meine Idee war, tl_member zu erweitern > globalen Butten "PDF". Als url einen key auf ein Modul setzen und dort die Logik zu Mitgliederabfrage und generieren des PDF einbauen.

    Button ist natürlich kein Problem, aber klick darauf generiert keine Ausgabe.
    Gibt es da ein Beispiel, wo ich das "abschauen" kann oder hätte jmd von euch einen Hinweis zum richtigen Vorgehen?

    danke! Markus

  12. #12
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    tcpdf kann man vergessen. dompdf https://github.com/dompdf/dompdf hat auch eine sehr gute CSS-Unterstützung. Ich hatte mal basierend auf dieser Erweiterung https://contao.org/de/extension-list...dompdf.en.html einen Mod angefertigt http://public.andreasburg.de/dompdf-3.0.0_rc2_1-mod.7z

    In den BE-Einstellungen sind einige Settings und die Aktivierung. Gerade nochmal in Contao 3.4 ausprobiert, geht, obwohl schon ca ein Jahr alt.

    In der /system/modules/dompdf/DompdfIgniter.php ist ein auskommentiertes Debugging, damit kann man den HTML-Inhalt, welcher an dompdf geschickt wird im Browser ausgeben und die weitere Scriptausführung stoppen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  13. #13
    Contao-Nutzer
    Registriert seit
    09.03.2014.
    Beiträge
    87

    Standard Lösung: PDF direkt aus Backend ausgeben

    Problem gelöst, hat wohl nicht funktioniert wegen Tippfehler ...
    Beschreibe das kurz, weil dies die Funktionalität doch wesentlich erhöht. Vielleicht hilft das jemand anderem auch mal weiter.

    Ziel: Adressetiketten direkt aus dem Backend in eine PDF-Datei drucken

    Kleine Erweiterung angelegt: zlabel

    config.php
    Code:
    $GLOBALS['BE_MOD']['accounts']['member']['create'] = array('zlabel', 'create');
    autoload.php generiert:

    Code:
    //Register the namespaces
    ClassLoader::addNamespaces(array
    (
    	'Phinetwork',
    ));
    //Register the classes
    ClassLoader::addClasses(array
    (
    	'Phinetwork\zlabel' => 'system/modules/zlabel/zlabel.php',
    ));
    in /dca Datei tl_member.php angelegt:
    Code:
    //Add a global operation to tl_member
    $GLOBALS['TL_DCA']['tl_member']['list']['global_operations']['create'] = array
    (
    'label'               => &$GLOBALS['TL_LANG']['tl_member']['create'],
    'icon'                => 'pickfile.gif',
    'href'				=>	'key=create'
    );
    in /languages/de eine Datei tl_member.php angelegt:
    Code:
    //give translation to global action
    $GLOBALS['TL_LANG']['tl_member']['create'] = array('Etiketten', 'Etiketten drucken');
    Im Modulordner eine Datei zlabel.php angelegt

    Code:
    // build an export to labels from tl_member
    namespace Phinetwork;
    
    //Class zlabel: provides methods to handle label printer
    class zlabel extends \Backend
    {	
        public function create()
        {
    	// Include library mPDF muss als Erweiterung installiert sein
    	require_once TL_ROOT . '/system/modules/mPDF/vendor/mPDF/mpdf.php';
    	// Create new PDF document
    	$pdf=new \mPDF('','A4','12pt','opensanscond',5,5,10,10,0,0);
    	$pdf->SetCreator( PDF_CREATOR );
    	$pdf->SetAuthor( PDF_AUTHOR );
    	//remove default header/footer
    	$pdf->SetHeader();
    	$pdf->SetFooter();
    	//initialize document and add a page
    	$pdf->AddPage();
    	//binde spezielles Stylesheet ein
    	$stylesheet= file_get_contents(TL_ROOT . 'files/css/pdfstyle.css');
    	$pdf->writeHTML($stylesheet, 1);
    	
    	//retrieve data from database and put all data in a va
    	$result = $this->Database->prepare('SELECT id,lastname,firstname,street,postal,city,country,mailmerger from tl_member ORDER by lastname,firstname')->execute();
    			while($result->next()){
    		$cont.='<div style="float:left;width:54mm;height:35.5mm;padding:4mm 6mm 0 6mm;clear:none;line-height:4.5mm;">
    		<div style="width:54mm;height:5mm;border-bottom:#e30000 thin solid;margin:0 0 2mm 0;font-size:8pt;"><div style="float:left;width:40mm">Company Street postal Code City</div></div>
    		<div style="width:54mm;">'.$result->firstname.' '.$result->lastname.'</div>';
    		$cont.= '<div>'.$result->street.'</div><div>'.$result->postal.' '.$result->city.'</div>';
    	}
    
    	//write $cont into pdf
    	$pdf->writeHTML($cont);
    
    	//produce PDF and make it available as download
    	$pdf->Output('etiketten.pdf', 'D');
    Ausgabe der Etiketten auf dem Etikettenbogen ist mit einfachem Floaten der einzelnen Etiketten gelöst. Voraussetzung ist die installierte Erweiterung mPDF

    Gruss Markus

  14. #14
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Gibt es eventuell schon Beispielseiten, wo man sich den Einsatz mal anschauen kann?

    Mark

  15. #15
    Contao-Nutzer Avatar von pcartist
    Registriert seit
    28.06.2009.
    Ort
    Rosenheim
    Beiträge
    173

    Standard Unterstützung con CSS Pseudoklassen für eine Tabelle

    Hallo,

    zuerst die Frage, ob das Thema in Verbindung mit Contao 4 überhaupt noch aktuell ist Soweit ich das sehe, wird aber immer noch per default tcpdf in Contao verwendet.

    Zur Problemstellung: ich habe eine Tabelle, die bedarfsweise mit 4 bzw. 5 Spalten daher kommt. Je nach Anzahl der Spalten wäre es schon einmal von Vorteil, wenn ich die Ausgabe im Hoch- bzw Querformat steuern könnte. Dazu brauche ich dann noch bevorzugt die Möglichkeit, Zeilen und Spalten mit Pseudoklassen zu stylen, da die Tabelle an sich frei von Klassen und ID's ist.

    Was also verwenden? mpdf oder dompdf?

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •