Contao-Camp 2024
Ergebnis 1 bis 19 von 19

Thema: contao-isotope-pdf-templates - Wie $pdf ergänzen/bearbeiten?

  1. #1
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Frage contao-isotope-pdf-templates - Wie $pdf ergänzen/bearbeiten?

    Hallo zusammen,

    vor knapp 2 Jahren hatte ich nach einer Möglichkeit gesucht mpdf für die Isotope Dokumente verwenden. In der Zwischenzeit (ok, auch schon wieder n gutes Jahr her! ) hat spooky sie geschaffen! (Danke dafür!)

    Nun bin ich dabei meine Word-Rechnungsvorlage in den Templates unterzubringen. Für mehrseitige PDFs hätte ich gern eine Fußzeile, aber ich weiß nicht, wie bzw. wo ich den mpdf Befehl
    Code:
    $pdf->SetFooter
    unterbringen kann.

    Wenn ich es in ein isotope_document_template packe, dann kommt der Fehler
    Code:
    Call to a member function SetHTMLFooter() on null
    . Vermutlich, weil zum Aufruf des Templates die $pdf noch nicht erstellt ist, oder?

    Auch habe ich versucht die Seitenränder im Template oder über eine "contao/config/config.php" zu verändern, da ich gern z.B. 2.5cm links und rechts hätte. Allerdings klappt das auch nicht.

    In der config habe ich folgende Infos:
    PHP-Code:
    <?php

    /* mPDF Ränder für Isotope Documents */

    \define('PDF_MARGIN_TOP'25);
    \
    define('PDF_MARGIN_BOTTOM'20);
    \
    define('PDF_MARGIN_LEFT'25);
    \
    define('PDF_MARGIN_RIGHT'25);
    Muss ich die dann nochmal neu einlesen? Oder ist die irgendwie falsch?

    Hoffe, ihr könnt mir helfen!

    Vielen Dank und viele Grüße
    Julian

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Warum genau benötigst du einen dedizierten Footer? Bzw. was genau soll dort rein?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Warum genau benötigst du einen dedizierten Footer? Bzw. was genau soll dort rein?
    Ich würde im Footer gern die typischen Unternehmensdaten (Name, Adresse, Bankdaten) und z.B. eine Seitenzahl, wenn es mehrere Artikel werden und ich damit mehr Seiten benötige, hinterlegen.

    Viele Grüße
    Julian

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Die statischen Elemente kannst du ja in das reguläre PDF Template geben. Für Seitenzahlen ist derzeit tatsächlich nichts vorgesehen (kann das mPDF überhaupt in irgendeiner Form?).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Ahja: https://mpdf.github.io/paging/page-numbering.html

    Ich schau mir das das heute mal an, wie man das am besten in die Extension integrieren könnte.
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Die statischen Elemente kannst du ja in das reguläre PDF Template geben.
    Ja, die statischen Elemente kann man da reinpacken. Aber eben auch Dinge wie die Seitenränder oder so, dachte ich, kann man so etwas flexibler anpassen. Deshalb auch die Frage nach
    Code:
    $pdf->...
    Damit könne man eben auch Header und Footer einbinden, oder auch etwas spezieller Einfluss auf die Seitenumbrüche nehmen.

    Wie kann ich denn die Seitenränder anpassen?

    VG,
    Julian

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Das sollte über die config.php so wie von dir beschrieben funktionieren.
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Du könntest übrigens das contao_isotope_pdf_templates.modify_pdf Event nutzen dort kommst du an das mPDF Objekt heran. Das Event habe ich bisher noch nicht dokumentiert.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das sollte über die config.php so wie von dir beschrieben funktionieren.
    Habs jetzt nochmal komplett neu gemacht, Prod Cache erneuert, und Tada. Wer weiß. Vermutlich n Schreibfehler.

    Zitat Zitat von Spooky Beitrag anzeigen
    Du könntest übrigens das contao_isotope_pdf_templates.modify_pdf Event nutzen dort kommst du an das mPDF Objekt heran. Das Event habe ich bisher noch nicht dokumentiert.
    Hm, ok. Das wäre ja genial. Muss ich mir mal ansehen. (Hab ich mich bisher noch nie mit beschäftigt gehabt! )

    Viele Grüße
    Julian

  10. #10
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du könntest übrigens das contao_isotope_pdf_templates.modify_pdf Event nutzen dort kommst du an das mPDF Objekt heran. Das Event habe ich bisher noch nicht dokumentiert.
    Also ich habe jetzt im isotope_document_template folgende Zeilen eingebunden:
    PHP-Code:
        use Symfony\Component\EventDispatcher\EventDispatcher;

        
    $dispatcher = new EventDispatcher();
        
    $dispatcher->addListener('contao_isotope_pdf_templates.modify_pdf', function (Event $event) {
            
    $mPDF $this->getPDF();
            
    $mPDF->SetHTMLFooter('
                        <table width="100%">
                            <tr>
                                <td width="33%">{DATE j-m-Y}</td>
                                <td width="33%" align="center">{PAGENO}/{nbpg}</td>
                                <td width="33%" style="text-align: right;">My document</td>
                            </tr>
                        </table>'
    );
        }); 
    Aber ändern tut er irgendwie nix. Da er auch keinen Fehler wirft scheint ja zumindest der Code richtig zu sein. Aber wenn ich sowas wie
    Code:
    dump("Ausgelöst");
    mit hinzufüge, dann finde ich den im Debugging Log nicht. Also wird das Event anscheinend nicht aufgerufen - oder eben dieser Codebestandteil ist dann schon wieder weg. Aber auch, wenn ich es in der config.php unterbringe, ändert das nix.

    Wo liegt der Fehler?

    Viele Grüße
    Julian

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Um einen Event Listener zu implementieren musst du einen Service registrieren und diesen entsprechend Taggen. In Contao 4.9 funktioniert das auch mit Annotations, ohne sonstige Anpassungen. Beispiele findest du hier, zumindest für die Contao Events: https://docs.contao.org/dev/reference/events/
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Wie gesagt: hab mich bisher noch nie mit "Events" beschäftigt, demnach auch keine wirkliche Ahnung, wie man darauf reagiert, deshalb vorweg gleich "Sorry", wenn die Fragen n bissel unsinnig erscheint, ich lerne noch.

    Also ich habe jetzt eine ModifyPdfEventListener.php in contao/config/ mit folgendem Inhalt erstellt:
    PHP-Code:
    <?php

    declare(strict_types=1);

    namespace 
    App\EventListener;

    use 
    InspiredMinds\ContaoIsotopePdfTemplatesBundle\Event;
    use 
    Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;

    /**
     * @ServiceTag("contao_isotope_pdf_templates.modify_pdf", event=ModifyPdfEvent::EVENT_NAME)
     */
    class ModifyPdfEventListener
    {
        public function 
    __invoke(ModifyPdfEvent $event): void
        
    {
            
    $mPDF $event->getPDF();
            
    $mPDF->SetHTMLFooter('
                <table width="100%">
                    <tr>
                        <td width="33%">{DATE j-m-Y}</td>
                        <td width="33%" align="center">{PAGENO}/{nbpg}</td>
                        <td width="33%" style="text-align: right;">My document</td>
                    </tr>
                </table>'
    );
        }
    }
    Vermutlich wird sich jetzt jeder der Ahnung hat denken: Ja, kann ja nicht funktionieren!

    Und meine Frage wäre: Warum nicht?

    Viele Grüße
    Julian

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Die Datei muss in den Ordner src/EventListener/
    » sponsor me via GitHub or PayPal or Revolut

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Der Service Tag muss außerdem kernel.event_listener sein.
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer
    Registriert seit
    02.11.2018.
    Beiträge
    44

    Standard

    Ich hab's versucht - wirklich. Aber irgendwie mag es nicht. Aber ich stelle mir halt schon die Frage: in welchen Ordner "/src/EventListener"? Den vom Contao-Core? Den von einem selbstgeschriebenen Modul? Den vom isotope-template? Oder ist das egal?

    kernel.event_listener habe ich auch als Tag geändert, aber vermutlich ist einfach noch mehr in der PHP falsch. Ich verstehe zwar das Konzept der Events und EventListener, aber die Programmierung erschließt sich mir nicht durch draufschauen - dazu habe ich leider zu wenig Erfahrung.

    Allerdings habe ich einen anderen Weg gefunden einen Header/Footer einzubauen.
    In der mpdf Doku gibt es eine Beispiel-Seite, in der dieser QT direkt nach dem <body>-Tag kommt:
    PHP-Code:
    <!--mpdf
    <htmlpageheader name="myheader">
    <
    table width="100%"><tr>
    <
    td width="50%" style="color:#0000BB; "><span style="font-weight: bold; font-size: 14pt;">Acme Trading Co.</span><br />123 Anystreet<br />Your City<br />GD12 4LP<br /><span style="font-family:dejavusanscondensed;">&#9742;</span> 01777 123 567</td>
    <td width="50%" style="text-align: right;">Invoice No.<br /><span style="font-weight: bold; font-size: 12pt;">0012345</span></td>
    </
    tr></table>
    </
    htmlpageheader>
    <
    htmlpagefooter name="myfooter">
    <
    div style="border-top: 1px solid #000000; font-size: 9pt; text-align: center; padding-top: 3mm; ">
    Page {PAGENOof {nb}
    </
    div>
    </
    htmlpagefooter>
    <
    sethtmlpageheader name="myheader" value="on" show-this-page="1" />
    <
    sethtmlpagefooter name="myfooter" value="on" />
    mpdf--> 
    Den Footer (Header hab ich nicht ausprobiert) bekommt man so definitiv hin. Das reicht ja auch.

    Obwohl ich das mit den Events schon gern auch verstehen würde.

    Beste Grüße
    Julian

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Zitat Zitat von JooNey Beitrag anzeigen
    Ich hab's versucht - wirklich. Aber irgendwie mag es nicht. Aber ich stelle mir halt schon die Frage: in welchen Ordner "/src/EventListener"? Den vom Contao-Core? Den von einem selbstgeschriebenen Modul? Den vom isotope-template? Oder ist das egal?
    Von deiner Contao Installation (musst du selbst anlegen).
    » sponsor me via GitHub or PayPal or Revolut

  17. #17
    Contao-Nutzer
    Registriert seit
    29.03.2020.
    Beiträge
    30

    Standard

    Ich klinke mich hier einfach mal ein weil es um das gleiche Modul geht.

    Ist es möglich zu beeinflussen wie die zweite Seite aussieht? Ich habe das Problem dass auf der zweiten Seite auch einfach die PDF in den Hintergrund gelegt wird, ich würde das aber gerne entweder so gestalten dass die PDF Datei ab der zweiten Seite gar nicht mehr hinterlegt ist oder ich eine inviduelle Seite habe für alle folgeseiten die dann nicht mehr der ersten Seite entspricht.

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Ja, wenn deine PDF Vorlage mehr als nur eine Seite nutzt, dann werden auch diese Seiten benutzt. Die letzte Seite wird dann wiederholt für weitere Seiten.
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Nutzer
    Registriert seit
    01.10.2014.
    Beiträge
    41

    Standard

    Das hab ich auch gesucht, sehr einfach danke!

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
  •