generated from leonetienne/LaTeX-Paper-template
283 lines
18 KiB
TeX
283 lines
18 KiB
TeX
\chapter{Stand der Technik}
|
|
\label{chap:stand-der-technik}
|
|
Der Stand der Technik bezieht sich auf bestehende, praktische Umsetzungen der erforderlichen Technologien.
|
|
Im Wesentlichen gibt es drei Arten von Technologien, die untersucht werden müssen: Die bestehende Webseite von \ac{WM},
|
|
Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-Dateien.
|
|
|
|
\section{Die bestehende Webseite}
|
|
Als Mitentwickler des Projektes ist dem Autor bekannt, dass die bestehende Webseite ein TYPO3-Redaktionssystem ist. Das Frontend der Webseite wird mit Webpack und Sass übersetzt.
|
|
Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor
|
|
\break\cite{bib:w3schools-sass}.
|
|
TYPO3 ist ein Redaktionssystem und PHP-Rahmen\-werk, das Daten- und Inhaltspflege in einem geschützten Bereich
|
|
ermöglicht.
|
|
Außerdem steuert TYPO3 Frontend-, Backend-Nutzer und deren Berechtigungen \cite{bib:typo3-docs-getting-started}.
|
|
Über die Systemerweiterung
|
|
\enquote{Extbase} wird eine mächtige Entwicklerschnittstelle bereitgestellt,
|
|
um hochindividualisierte Funktionalitäten zu ermöglichen.
|
|
\\\cite{bib:typo3-docs-extbase-reference}
|
|
|
|
\section{QR-Code-Bibliotheken}
|
|
Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen.
|
|
Im Folgenden werden einige Implementationen von QR-Code-Generator-Bibliotheken im Detail betrachtet. Es wird sich
|
|
auf bereits vom System verwendete Programmiersprachen begrenzt.
|
|
|
|
\subsection{JavaScript-Implementationen}
|
|
\subsubsection*{jquery-qrcode.js}
|
|
\enquote{jquery-qrcode.js} ist ein Plugin für jQuery, um dynamisch QR-Codes auf Browserseite zu generieren.
|
|
Jedoch verweist diese Bibliothek selbst auf ihren desolaten Zustand und empfielt stattdessen \enquote{kjua} zu verwenden
|
|
\cite{bib:larsjung-jquery-qrcode}. Somit scheidet \enquote{jquery-qrcode.js} für nähere Evaluationen aus, da die Software nicht mehr
|
|
gepflegt wird. \enquote{jquery-qrcode.js} wurde bis Januar 2023 853 mal von Nutzern mit einem Stern
|
|
markiert \cite{bib:larsjung-jquery-qrcode}.
|
|
Wenn ein Nutzer ein Github-Repository mit einem Stern markiert, zeigt sich der Nutzer interessiert genug,
|
|
um über Neuigkeiten auf dem Laufenden gehalten werden zu wollen \cite{bib:github-stars}. \enquote{jquery-qrcode.js} ist MIT-lizensiert
|
|
\cite{bib:larsjung-jquery-qrcode}.
|
|
|
|
\subsubsection*{kjua}
|
|
\enquote{kjua} ist eine JavaScript-Bibliothek, die dynamisch QR-Codes auf Browserebene generiert.
|
|
Im Gegensatz zu \enquote{jquery-qrcode.js} funktioniert \textit{kjua} auch ohne jQuery. Es werden diverse Stilattribute für gestaltete
|
|
QR-Codes unterstützt \cite{bib:larsjung-kjua}. \enquote{kjua} kann QR-Codes über HTML-Canvas, Bilder und Vektorgrafiken umsetzen.
|
|
Das ist bei näherer Betrachtung der Kjua-Tech-Demo \enpointy{https://larsjung.de/kjua/latest/demo} ersichtlich, jedoch
|
|
nicht explizit erwähnt. Nach dem aktuellen Stand (Januar 2023) wurde \enquote{kjua} von 243 Nutzern mit einem Stern markiert.
|
|
\enquote{Kjuas} letzte Codeänderung liegt circa zwei Jahre zurück. Es gibt eine unbeantwortete, sieben Jahre alte Pull-Request und
|
|
Issues scheinen ignoriert zu werden. \enquote{kjua} ist MIT-lizensiert \cite{bib:larsjung-kjua}.
|
|
|
|
\subsubsection*{soldair/node-qrcode}
|
|
\enquote{soldair/node-qrcode} ist eine Node.js-basierte Implementation eines QR-Code-Generators und bietet somit Funktionialität
|
|
serverseitig, als Kommandozeilenwerkzeug, sowohl auch browserseitig an. Die Readme-Datei ist umfangreich, reich an Beispielen
|
|
und detailreichen Erklärungen. Der letzte Commit ist zu diesem Zeitpunkt knapp älter als ein halbes Jahr. Somit macht das
|
|
Projekt einen moderat gepflegten Eindruck. Die Readme-Datei verweist auf Unit-Tests bei Travis, jedoch lief die letzte Pipeline
|
|
Februar 2021 durch und schlug fehl. Einige Pull-Requests und Issues werden seit Jahren ignoriert
|
|
\cite{bib:soldair-node-qrcode}.
|
|
Die Bibliothek wurde 74 Millionen mal heruntergeladen und mit 6.308 Sternen markiert.
|
|
\enquote{Soldair/node-qrcode} ist MIT-lizensiert \cite{bib:npmjs-soldair-node-qrcode}.
|
|
|
|
\subsection{PHP-Implementationen}
|
|
\subsubsection*{chillerlan/php-qrcode}
|
|
Eine arrivierte Lösung für QR-Code-Generierung in PHP ist \break\enquote{chillerlan/php-qrcode}, umgesetzt durch
|
|
Eugen Rochko et al.. \break\enquote{chillerlan/php-qrcode}s Etabliertheit zeigt sich durch den zu diesem
|
|
Zeitpunkt (Januar 2023) auf 5 Millionen stehenden Downloadzähler,
|
|
mehreren Entwicklern und dem letzten Commit, der zu diesem Zeitpunk nicht älter als einen Monat ist.
|
|
Insgesamt erfolgten bis dato 808 Commits von 6 Entwicklern. Das Projekt verfügt über Unit-Tests,
|
|
die 90\% der Zeilen der Codebase abdecken. Rochko übernahm Teile der Codebase aus
|
|
dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP.
|
|
Es gibt zu diesem Zeitpunkt keine unbeantworteten Issues oder Pull-Requests.
|
|
\enquote{chillerlan/php-qrcode} basiert auf einer angepassten Version von \enquote{kazuhikoarase/qrcode-generator}.
|
|
Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem Emoji bestehen.
|
|
\enquote{chillerlan/php-qrcode} wurde von 1.212 Github-Nutzern mit einem Stern markiert.
|
|
Die Bibliothek ist MIT-lizensiert
|
|
\cite{bib:chillerlan-php-qrcode}.
|
|
|
|
\subsubsection*{kreativekorp/barcode}
|
|
\enquote{kreativekorp/barcode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von
|
|
\enquote{Kreative Software}, R.G. Bettencourt.
|
|
Diese Implementation umfasst etablierte Barcode-Formate und unterstützt eine Vielzahl an Anpassungsmöglichkeiten.
|
|
Das Projekt wurde bis zum heutigen Tag 189 mal mit Sternen markiert \cite{bib:kreativkorp-barcode}.
|
|
Vier von den sechs vorhandenen Commits erfolgten innerhalb von zwei Tagen in 2016. Ein weiterer
|
|
Commit erfolte wenige Tage später. Der aktuellste Commit wurde knapp zwei Jahre später, 2018, veröffentlicht.
|
|
Das liegt zu diesem Zeitpunkt vier Jahre in der Vergangenheit.
|
|
Damit ist diese Bibliothek de facto sechseinhalb Jahre alt und wurde seitdem einmal um Featuers erweitert.
|
|
Issues und Pull-Requests werden weitestgehend ignoriert.
|
|
Die Bibliothek verwendet die MIT-Lizenz.
|
|
\\\cite{bib:kreativkorp-barcode}.
|
|
|
|
\subsubsection*{Bacon/BaconQrCode}
|
|
\enquote{Bacon/BaconQrCode} ist eine PHP-Bibliothek zur Generierung von QR-Codes, bereitgestellt von Ben Scholzen, hinter
|
|
der Github-\break{}Organisation \enquote{Bacon}, dessen einziges Mitglied Scholzen darstellt. Verlinkt ist eine Homepage,
|
|
die zu einer Nginx-\enquote{Hello World}-Seite führt. Begleitet wird \enquote{BaconQrCode} von etlichen weiteren \enquote{Bacon-Projekten}
|
|
wie Beispielsweise \enquote{BaconPdf}, \enquote{BaconStringUtils} und \enquote{BaconUser} um nur einige zu nennen.
|
|
Insgesamt machen die stichprobenartig betrachteten Projekte einen desolaten Eindruck mit zuteils aktuellesten Commits
|
|
von vor zehn Jahren. \enquote{BaconQrCode} stellt das beliebteste und gepflegteste Projekt von Scholzen mit 1.508 Sterne-Markierungen und
|
|
einem aktuellsten Commit von vor zwei Monaten dar. \enquote{BaconQrCode} fällt mit siebzehn Entwicklern auf, die jeweils zumindest
|
|
einen Commit beigetragen haben. Zu diesem Zeitpunkt fanden 177 Commits statt. Githubs DependencyGraph verzeichnet
|
|
nahezu 80.000 Projekte, die BaconQrCode verwenden \cite{bib:bacon-baconqrcode} und Packagist meldet 50 Millionen Downloads
|
|
\cite{bib:packagist-baconqrcode}.
|
|
Wie \enquote{chillerlan/php-qrcode} baut auch Scholzen auf existierende Technik von \enquote{ZXing} auf.
|
|
Eine Dokumentation neben der Readme-Datei existiert nicht und
|
|
diese ist sehr minimalistisch. \enquote{BaconQrCode} kann QR-Codes als Rasterbilder und Vektorgrafiken (SVG und EPS) generieren.
|
|
Spezielle Styles sind nicht erwähnt. Ein Großteil der Issues und Pull-Requests wurden behandelt.
|
|
\enquote{BaconQrCode} unterliegt einer BSD-2-Clause-Lizenz
|
|
\cite{bib:bacon-baconqrcode}.
|
|
|
|
\subsection{Subjektiver Vergleich im Bezug auf die Problemstellung}
|
|
Im Folgenden werden subjektive Einschätzungen und Meinungen des Autors über die Eignung der beleuchteten
|
|
Bibliotheken vorgestellt.
|
|
Um eine Bibliothek als \enquote{am geeignetsten} für einen Anwendungsfall unter den betrachtenen Bibliotheken zu kurieren,
|
|
müssen die konkreten Anforderungen für diesen Anwendungsfall beachtet werden.
|
|
Das ist so, da verschiedene Eigenschaften der Bibliotheken verschiedene Auswirkungen in Gewichtung und Richtung
|
|
je nach Anwendungsfall aufweisen.
|
|
Hierfür werden die zuvor vorgestellten Bibliotheken zur Erstellung von QR-Codes in den folgenden Attributen gegenübergestellt:
|
|
\begin{description}
|
|
\item [Funktionialität] \hfill \\
|
|
Der Umfang, der unterstützten Funktionen, in Annahme dessen, dass die Bibliothek
|
|
syntaktisch und semantisch korrekt ist\\\cite{bib:heinemann-vorlesung-re}.
|
|
|
|
\item [Gepflegtheit] \hfill \\
|
|
Das Ausmaß, in dem das Projekt aktiv gepflegt wird und ordnungsgemäß entwickelt zu sein scheint.
|
|
Hierzu zählen beispielsweise: Bearbeitung von Issues, Bearbeitung von Pull-Requests, Präsenz von Tests,
|
|
Präsenz einer angemessenen Dokumentation, häufige Commits, mehrere Entwickler, Anzahl der
|
|
Sterne auf Github, sowie der Anzahl der
|
|
Downloads bzw. Installationen, falls verfügbar.
|
|
|
|
\item [Workflow-Eignung] \hfill \\
|
|
Die Eignung einer Bibliothek in existierende Workflows und Randbedingungen übernommen zu werden. Maßgeblich ist,
|
|
ob und mit wie viel Aufwand eine Bibliothek in das Projekt übernommen werden kann.
|
|
Beispielsweise ist es deutlich aufwändiger eine JavaScript-Bibliothek in einem PHP-Projekt zu verwenden, als eine native PHP-Bibliothek.
|
|
Ebenfalls ist relevant, ob die Lizenz einer Bibliothek eine Verwendung gestattet, bzw. welche Bedingungen gelten.
|
|
\end{description}
|
|
|
|
Hierbei werden den verschiedenen Bibliotheken Punkte $[0,10]$ in den drei zuvor genannten
|
|
Kategorien vergeben. Nicht ermittelte Werte werden in ihrer Kategorie durch \enquote{$-$} repräsentiert, wodurch
|
|
eine weitere Verwendung ausgeschlossen wird.
|
|
Die Kumulativpunktzahl $[0,30]$ einer Bibltiothek beschreibt deren Gesamteignung, nach subjektivem
|
|
Empfinden des Autors.
|
|
|
|
\subsubsection*{kjua}
|
|
\enquote{kjua} ist funktional für dieses Projekt gut aufgestellt, da es optisch ansprechende QR-Codes mit Logo unterstützt. Das wird
|
|
mit acht Punkten in \enquote{Funktionalität} bemessen.
|
|
\enquote{kjua} macht andererseits einen eher desolaten Eindruck und lässt somit begründete Zweifel an dessen Zukunftssicherheit zu.
|
|
Eine knappe Dokumentation ist verfügbar. Für die Dokumentation werden zwei Punkte in \enquote{Gepflegtheit} angerechnet.
|
|
\enquote{kjua} ist als JavaScript-Bibliothek nur schwer mit den Anforderungen vereinbar,
|
|
da der QR-Code in einem PDF eingebunden werden soll. Hierfür ist ein serverseitiger PDF-Generator vorgesehen.
|
|
\enquote{kjuas} Lizenz erlaubt Verwendung in kommerziellen, Closed-Source-Projekten \cite{bib:opensource-license-mit}.
|
|
Die Exklusivität für Nutzung in Webbrowsern schließt eine Einbindung in den Workflow aus.
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|}
|
|
\hline
|
|
\textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
8 & 2 & 0 & 10\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Subjektive Evaluation: kjua}
|
|
\end{table}
|
|
|
|
\subsubsection*{soldair/node-qrcode}
|
|
Soldairs Lösung sieht dokumentativ und funktional vielversprechend aus.
|
|
Hierdurch bilden sich acht Punkte in \enquote{Funktionalität} ab.
|
|
Da diese Bibliothek eine Node.js-Bibliothek ist und Node.js ohne Browser, als Kommandozeilenapplikation, ausgeführt werden
|
|
kann \break\cite{bib:nodejs-api-cli}, bietet sich
|
|
\enquote{soldair/node-qrcode} als serverseitige Anwendung an. Die Lizenz spricht nicht gegen eine Verwendung. Dennoch wäre es
|
|
ein vermeidbarer Mehraufwand generierte QR-Codes aus einer Node.js-Applikation in eine PHP-Umgebung zu
|
|
übertragen. Das bildet sich mit vier Punkten in \enquote{Workflow-Eignung} ab.
|
|
Darüberhinaus macht \enquote{soldair/node-qrcode} einen verbesserungswürdigen Eindruck der Projektpflege, wofür es lediglich
|
|
drei Punkte gibt.
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|}
|
|
\hline
|
|
\textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
8 & 3 & 4 & 15\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Subjektive Evaluation: soldair/node-qrcode}
|
|
\end{table}
|
|
|
|
\subsubsection*{chillerlan/php-qrcode}
|
|
Rochkos Lösung macht einen aktiv gepflegten Eindruck und wird von großen Downloadzahlen gestützt.
|
|
Rochko stellt eine ausführliche Dokumentation und Codebeispiele bereit.
|
|
Hierfür wird die volle Punktzahl in \enquote{Gepflegtheit} vergeben.
|
|
Der Funktionsumfang übersteigt weit die Anforderungen und gestattet so ausführlich gestaltete QR-Codes zu generieren
|
|
\cite{bib:chillerlan-php-qrcode-demo},
|
|
die somit die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}.
|
|
Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}.
|
|
\enquote{chillerlan/php-qrcode} lässt sich nahtlos in das existierende Projekt eingliedern,
|
|
da es als PHP-Bibliothek über Composer eingebunden werden kann und eine eigene API bereitstellt \cite{bib:chillerlan-php-qrcode}.
|
|
Die von Rochko verwendete Lizenz gestattet eine unkomplizierte Verwendung. \enquote{chillerlan/php-qrcode} funktioniert sowohl mit
|
|
PHP- $7.x$ als auch $8.x$. Die Bibliothek benötigt zwei weitere Abhängigkeiten. Eine dieser Abhängigkeiten ist ebenfalls von Rochko
|
|
bereitgestellt \cite{bib:chillerlan-php-qrcode-composerjson} und weist eine ähnlich gute Projektpflege auf
|
|
\cite{bib:chillerlan-php-settings-container}. Das wird mit der Maximalwertung in \enquote{Workflow-Eignung} berechnet.
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|}
|
|
\hline
|
|
\textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
10 & 10 & 10 & 30\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Subjektive Evaluation: chillerlan/php-qrcode}
|
|
\end{table}
|
|
|
|
\subsubsection*{kreativekorp/barcode}
|
|
Kreativekorp beeindruckt in der Readme-Datei durch Nutzungsbeispiele und Dokumentation,
|
|
sowie einer Vielzahl unterstützter Barcode-Formate, darunter auch QR-Codes und einiger improvisierter Tests.
|
|
In Anbetracht dessen, dass die Bibliothek de facto sechseinhalb Jahre alt ist und seit vier Jahren nicht mehr
|
|
angepasst wurde, wird eine geringe Wertung von drei Punkten in \enquote{Gepflegtheit} vergeben.
|
|
Null Punkte in \enquote{Workflow-Eignung} rechtfertigen sich durch die Abwesenheit jeglicher
|
|
Unterstützung für Paketmanager, wodurch eine saubere Verwendung in dem Brown-Field-Projekt
|
|
Änderungen an der Bibliothek an sich erfordern würde.
|
|
Die Funktionalität wurde aufgrund der desaströsen Gepflegtheit und Eignung nicht näher untersucht,
|
|
da eine Verwendung selbst mit guter Funktionalität nicht infrage käme.
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|}
|
|
\hline
|
|
\textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
- & 3 & 0 & -\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Subjektive Evaluation: Kreativekorp/barcode}
|
|
\end{table}
|
|
|
|
\subsubsection*{Bacon/BaconQrCode}
|
|
\enquote{BaconQrCode} nennt keine speziellen Optionen, um näheren Einfluss auf den generierten QR-Code auszuüben.
|
|
Es werden Rasterbilder und verschiedene Vektorformate als Renderziel unterstützt. Aufgrund der fehlenden Optionen,
|
|
die andere Bibliotheken bereitstellen, werden lediglich fünf von zehn Punkten in \enquote{Funktionalität} vergeben.
|
|
Die Projektgepflegtheit ist inkonsistent. Manche Stellen, beispielsweise die Mitwirkenden, Alter des neuesten Commits, Tests
|
|
und Nutzerzahlen machen einen guten Eindruck, während Punkte wie die Dokumentation, die Organisationswebseite und andere
|
|
Projekte von Scholzen Sorgen begründen. Weil der Programmcode an sich gut gepflegt aussieht und große Downloadzahlen von
|
|
häufiger Verwendung sprechen, werden für die \enquote{Gepflegtheit} acht Punkte vergeben.
|
|
Da es sich hierbei um eine PHP-Bibliothek handelt, die über Composer in PHP- $7.x$ und $8.x$ Projekte geladen werden kann
|
|
und das Projekt eine API bereitstellt, ist die technische Workflow-Eignung gut.
|
|
Die BSD-2-Clause-Lizenz verkompliziert eine Integration,
|
|
da somit eine Copyright-Notiz an Nutzer gezeigt werden müsste \cite{bib:opensource-license-bsd-2}.
|
|
Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurch sieben Punkte vergeben werden.
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|}
|
|
\hline
|
|
\textbf{Funktionalität} & \textbf{Gepflegtheit} & \textbf{Workflow-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
5 & 8 & 7 & 20\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Subjektive Evaluation: Bacon/BaconQrCode}
|
|
\end{table}
|
|
|
|
\subsection{Fazit}
|
|
Nach Evaluation der verschiedenen QR-Code-Bibliotheken im Kontext der vorliegenden Problemstellung erweist sich aus Sicht des Autors
|
|
\break\enquote{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek unter den Betrachteten.
|
|
Somit wird \enquote{chillerlan/php-qrcode} als QR-Code Technologie in der Lösung dieser Problemstellung verwendet.
|
|
|
|
\begin{table}[htbp]
|
|
\centering
|
|
\begin{tabular}{|l|l|l|l|l|}
|
|
\hline
|
|
\textbf{Bibliothek} & \textbf{Funkt.} & \textbf{Gepflegtht.} & \textbf{WF.-Eignung} & \textbf{$\Sigma$}\\
|
|
\hline
|
|
\hline
|
|
chillerlan/php-qrcode & 10 & 10 & 10 & 30\\\hdashline
|
|
Bacon/BaconQrCode & 5 & 8 & 7 & 20\\\hdashline
|
|
soldair/node-qrcode & 8 & 3 & 4 & 15\\\hdashline
|
|
kjua & 8 & 2 & 0 & 10\\\hdashline
|
|
kreativekorp/barcode & - & 3 & 0 & -\\
|
|
\hline
|
|
\end{tabular}
|
|
\caption{Gesamtübersicht: Subjektive Evaluation der QR-Code Bibliotheken}
|
|
\label{tbl:qrlib-compare-barchart}
|
|
\end{table}
|
|
|
|
\section{PDF-Generator}
|
|
Firmenintern ist der PDF-Generator \enquote{mpdf/mpdf} etabliert und wird bereits
|
|
in zahlreichen Projekten verwendet.
|
|
Um die projektübergreifende Kontinuität der Technik zu wahren und um somit die
|
|
Wartbarkeit und Nachhaltigkeit des hier behandelten Softwareproduktes
|
|
zu fördern, wird sich für den PDF-Generator entschieden, der bereits firmeninterner Standard ist.
|
|
Unabhängig dessen ist \enquote{mpdf} ein gut gepflegtes Projekt mit einem Alter von mehr als acht Jahren,
|
|
Sponsoren, 72 Entwicklern, über 31 Millionen Downloads, über 3.900 Sterne-Markierungen, über 800 Commits
|
|
und regelmäßigen Updates. \enquote{Mpdf} ein Composer-Paket und für verschiede PHP-Versionen verfügbar.
|
|
Mpdf verwendet eine GPL-2.0 Lizenz \cite{bib:mpdf}.
|