
Erstellen Sie ein PDF von jedem Entity in Drupal - Überprüfung des Entity Print Moduls
Die Erstellung einer dynamischen PDF-Datei ist einer der wichtigsten Punkte eines Projekts. Entscheidend ist, die richtige Lösung zu finden, die Ihren Erwartungen und Anforderungen entspricht. In diesem Artikel zeigen wir Ihnen eines der beliebtesten PDF-Generierungsmodule für Drupal, das Ihnen bei der Erstellung, Anzeige oder dem Herunterladen von Berichten, Artikeln und Rechnungen im PDF-Format helfen wird.
Daten
Die erste Version des Moduls wurde am 22. Januar 2015 veröffentlicht, das letzte Update am 18. Juni 2020.
Das Modul kann installiert werden auf:
- Drupal 7 (7.x-1.5 stabile Veröffentlichungs-Version),
- Drupal 8 und 9 (8.x-2.2 stabile Veröffentlichungs-Version).
Alle stabilen Veröffentlichungen dieses Projekts sind durch die Sicherheitsberater-Richtlinien abgedeckt.
Beliebtheit des Moduls
Laut den Nutzungsstatistiken von der Seite des Moduls wird es aktuell von etwa 12.000 Websites verwendet.
Ersteller des Moduls
Das Modul wird von benjy erstellt und gewartet.
Wofür wird das Modul verwendet?
Entity Print ermöglicht es Ihnen, jede Drupal-Entität (Drupal 7 und 8) oder Ansicht (nur Drupal 8+) in eine PDF-Datei zu drucken (speichern). Es nutzt die PDF-Engines, die auf beliebten PHP-Bibliotheken wie Dompdf, Phpwkhtmltopdf und TCPDF basieren.
Unboxing
Um Entity Print zu installieren, gehen Sie auf die Webseite oder führen Sie es über Composer aus:
composer require "drupal/entity_print 2.x"
Dompdf installieren: composer require
composer require "dompdf/dompdf:0.8.0"
Zusätzlich können Sie Wkhtmltopdf und TCPDF Engines installieren.
composer require "mikehaertl/phpwkhtmltopdf ~2.1" composer require "tecnickcom/tcpdf ~6"
- Aktivieren Sie das Entity Print Modul.
- Erteilen Sie Berechtigungen für Nicht-Admin-Benutzer zum Herunterladen der PDFs.
- Optional das Entity Print Views Modul aktivieren.

Entity Print konfigurieren
Lassen Sie uns überprüfen, was dieses Modul zur Konfiguration ermöglicht.
- Standard-CSS aktivieren - sehr grundlegende Styles bereitstellen.
- Download erzwingen - den Browser zwingen, die PDF-Datei herunterzuladen.
- PDF - wählen Sie die Standard-PDF-Engine für den Druck aus.
- Papiergröße - ändern Sie die Seitengröße, um das PDF zu drucken.
- Papierausrichtung - die Ausrichtung auf Quer- oder Hochformat ändern.
- HTML5-Parser aktivieren - Dompdf funktioniert ohne diese Option nicht.
- Protokoll deaktivieren - Deaktivierung des Dompdf-Protokolls zu log.html im temporären Verzeichnis von Drupal.
- Remote-URLs aktivieren - muss aktiviert sein, damit CSS und Bilder funktionieren, es sei denn, Sie bearbeiten die Quelle manuell.
- SSL-KONFIGURATION - könnte nur für die Entwicklung benötigt werden, im Produktivbetrieb sollten Sie diese nicht ändern.
- HTTP-AUTHENTIFIZIERUNG - wenn Ihre Website hinter einer HTTP-Authentifizierung steht, können Sie Benutzername/Passwort eingeben.
- EPub - wählen Sie die Standard-EPub-Engine für den Druck aus (derzeit nicht unterstützt, Sie können dem offenen Problem folgen).
- Word-Dokument - wählen Sie die Standard-Word-Dokument-Engine für den Druck aus (derzeit nicht unterstützt, folgen Sie dem offenen Problem).

Die bevorzugte PDF-Engine ist Dompdf, welche (hauptsächlich) eine CSS 2.1-konforme HTML-Layout- und Rendering-Engine ist, die in PHP geschrieben wurde. Es handelt sich um einen stilgesteuerten Renderer, d. h. es wird externe Stylesheets, Inline-Style-Tags und die Style-Attribute einzelner HTML-Elemente herunterladen und lesen. Es unterstützt auch die meisten präsentationsbezogenen HTML-Attribute.
Verwendung des Moduls
Nachdem das Modul korrekt konfiguriert und alle Berechtigungen gesetzt sind, können wir mit dem Export von Entitäten und Ansichten in eine PDF-Datei beginnen.
Exportieren von Entitäten
Entity Print fügt den Ansichtsmodi jedes Inhaltstyps ein deaktiviertes Feld hinzu. Das Feld hat einen Standard-Labelwert von "PDF anzeigen". Um dieses Feld bei einem Inhaltstyp sichtbar zu machen, aktivieren Sie es auf der Seite Anzeige verwalten
(/admin/structure/types/manage/[content_type]/display).

Von nun an wird ein PDF anzeigen-Button zu unserem Inhaltstyp hinzugefügt. Der URL-Button lautet:
https://example.com/print/pdf/[entity_type]/[entity_id]
(z. B. https://example.com/print/pdf/node/1)

Hier ist das PDF, das wir speichern oder drucken möchten:

Ansichten exportieren
Mit dem aktivierten Entity Print Views Modul kann eine globale "Drucken"-Option zur Kopf- oder Fußzeile der Ansicht hinzugefügt werden.
Der URL-Button sieht folgendermaßen aus:
https://example.com/print/view/pdf/[view_id]/[display_id]

Debugging
Für einfaches und schnelles Debugging bietet Entity Print uns eine HTML-Version der an die PDF-Engine gesendeten Entitäten. Die URL sieht ziemlich gleich aus, nur mit /debug angehängt.
Z. B. https://example.com/print/pdf/[entity_type]/[entity_id]/debug.
Wie man den PDF anzeigen-Link in der exportierten Datei versteckt
Standardmäßig wird der "PDF anzeigen"-Link auch zu der PDF hinzugefügt. Um ihn zu entfernen, gehen Sie auf die Seite Anzeige verwalten des spezifischen Inhaltstyps. Im Abschnitt Anpassung der Anzeigeeinstellungen müssen Sie den PDF-Ansichtsmodus aktivieren.

Jetzt können Sie das Entity Print-Feld in diesem Ansichtsmodus deaktivieren. Wenn Sie das PDF das nächste Mal exportieren, wird der "PDF anzeigen"-Link nicht enthalten.
Standardmäßig ist der PDF-Ansichtsmodus nur für Knoten installiert. Falls Sie benutzerdefinierte Entitäten haben, müssen Sie zuerst einen PDF-Ansichtsmodus für den spezifischen Entitätstyp über "admin/structure/display-modes/view" erstellen. Sie können ihn beliebig benennen, aber denken Sie daran, dass ein Maschinenname "pdf" sein sollte, da er automatisch mit dem Entitätsnamen vorangestellt wird.
Styling des PDFs von Ihrem Theme
Die folgenden Beispiele zeigen, wie man entity_print CSS-Dateien aus der your_theme_name.info.yml-Datei registriert. Sie können dies für jeden Entitätstyp oder sogar Ansicht tun.
#CSS-Bibliothek zu allen Knoten hinzufügen:
entity_print:
node:
all: 'YOUR_THEME_NAME/print-styling'
#CSS-Bibliothek zu den Knoten, aber nur für Artikelbündel hinzufügen:
entity_print:
node:
article: 'YOUR_THEME_NAME/print-styling'
#CSS-Bibliothek zu allen Ansichten hinzufügen:
entity_print:
view:
all: 'YOUR_THEME_NAME/print-styling'
Vergessen Sie nicht, eine CSS-Bibliothek in Ihrer YOUR_THEME_NAME.libraries.yml zu definieren:
print-styling: version: VERSION css: theme: css/print-style.css: { }
Ändern von Templates
Alle normalen Wege zur Überschreibung von Templates stehen zur Verfügung. Mithilfe von Theme-Hook-Vorschlägen können Sie ein Twig-Template erstellen und den Inhalt einer beliebigen spezifischen Entität (z. B. node--blog-post--pdf.html.twig) ändern. In diesem Template können Sie das Markup wie gewohnt ändern, indem Sie {{ content.field_example }} oder {{ node.field_example }} verwenden.
Sie können die HTML-Ausgabe des gesamten Entity Print-Templates ändern. Kopieren Sie einfach die entity-print.html.twig-Datei von ihrem Basisspeicherort in Ihren Theme-Ordner. Mithilfe von Theme-Hook-Vorschlägen können Sie auch eine entity-print--node--[content-type].html.twig-Datei erstellen.
<html>
<head>
<meta charset="utf-8">
<title>{{ title }}</title>
{{ entity_print_css }}
</head>
<body>
<div class="page">
{{ content }}
</div>
</body>
</html>
Stellen Sie sicher, dass das {{ entity_print_css }} immer innerhalb des -Tags in Ihrer benutzerdefinierten Twig-Template-Datei enthalten ist. Andernfalls funktionieren Ihre benutzerdefinierten CSS-Bibliotheken nicht.
Benutzerdefinierte PDF-Engines
Es ist erwähnenswert, dass die Entity Print PDF-Engines steckbar sind. Das bedeutet, dass Sie problemlos Ihre eigenen Engines implementieren können. Dazu müssen Sie eine Klasse in Ihrem_modulename/src/Plugin/EntityPrint/NewPdfEngine.php erstellen, die Drupal\entity_print\Plugin\PrintEngineInterface mit allen erforderlichen Methoden implementiert. Danach wird Ihr Plugin in der Auswahlliste der Engines auf der Konfigurationsseite verfügbar sein.
Alternative Lösungen
Es gibt einige andere Optionen zur Erstellung eines PDFs einer Entität in Drupal, die Sie untersuchen möchten.
PrintFriendly & PDF ist ein Plugin für Drupal 7, 8 und 9. Unten sehen Sie dessen Funktionsliste:
- Es ist vollständig anpassbar.
- Mit der On-Page-Lightbox-Option wird die PDF-Datei in einer Lightbox geöffnet.
- Es ermöglicht Ihnen, eine PDF zu drucken oder zu erhalten.
- Sie können die Seite bearbeiten, bevor Sie sie drucken oder eine PDF erhalten, indem Sie beispielsweise die Bilder und Absätze entfernen, die Sie nicht benötigen.
Drucker- und PDF-Versionen für Drupal 8+ ist ein Modul, das auch für Drupal 9 funktioniert. Es ermöglicht Ihnen das Erstellen der folgenden druckerfreundlichen Versionen eines beliebigen Knotens:
- druckerfreundliche Webseitenversion (unter /node/[node_id]/printable/print),
- PDF-Version (unter /node/[node_id]/printable/pdf).
Unterstützte Bibliotheken:
- mPDF,
- TCPDF,
- wkhtmltopdf,
- dompdf.
Zusammenfassung
Das Entity Print Modul bietet mehrere Methoden zum Exportieren von Entitäten in PDFs über verschiedene PDF-Engines. Es ist ein sehr flexibles und anpassbares Modul, das Ihnen bei der dynamischen Generierung Ihrer Artikel, Rechnungen oder anderer Inhalte, die mit Ihrer Drupal-Website zusammenhängen, helfen wird. Das Modul hat eine vollständige Testabdeckung und ist bereit für den Einsatz in der Produktion für Drupal 7, 8 und 9.