generated from leonetienne/LaTeX-Paper-template
feat: pdf gen
This commit is contained in:
parent
d1f6345306
commit
d18f0f197c
@ -292,7 +292,7 @@ Grundlegend, kann für diese Funktion kein Master-Theorem angewandt werden,
|
|||||||
da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt \cite{bib:schwarzer-vorlesung-alg}.
|
da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt \cite{bib:schwarzer-vorlesung-alg}.
|
||||||
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
||||||
sondern gleich groß bleibt.
|
sondern gleich groß bleibt.
|
||||||
Das verletzt die Bedingung $b>1$ des Master-Theorem, dargestellt als\\$T(n) = a*T(\frac{n}{b})+f(n)$.
|
Das verletzt die Bedingung $b>1$ des Master-Theorem, dargestellt als $T(n) = a*T(\frac{n}{b})+f(n)$.
|
||||||
Betrachten wir den Algortihmus, besteht er aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
Betrachten wir den Algortihmus, besteht er aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
||||||
gleicher Länge.
|
gleicher Länge.
|
||||||
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
||||||
@ -329,10 +329,53 @@ Hierfür wird die eingebaute PHP-Funktion \enquote{array\_keys} verwendet. Diese
|
|||||||
Keys eines Arrays in Form eines numerisch indizierten Arrays zurück.
|
Keys eines Arrays in Form eines numerisch indizierten Arrays zurück.
|
||||||
Der optionale Parameter \enquote{filter\_values} bestimmt, dass ausschließlich die Keys
|
Der optionale Parameter \enquote{filter\_values} bestimmt, dass ausschließlich die Keys
|
||||||
der Key-Value-Pairs, die einen bestimmten
|
der Key-Value-Pairs, die einen bestimmten
|
||||||
Wert tragen, extrahiert werden. D.h., der Funktionsaufruf filtert alle Keys und somit alle Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfeldname>-true} haben. Das ist eine Liste
|
Wert tragen, extrahiert werden \cite{bib:php-array-keys}. D.h., der Funktionsaufruf filtert alle Keys und somit alle
|
||||||
|
Formfeld-IDs des Formfeldparameter-Arrays heraus, die den Wert \enquote{<formfeldname>-true} haben. Das ist eine Liste
|
||||||
aller Formfeld-IDs der Checkboxen des SelectMultiples, die angehakt wurden.
|
aller Formfeld-IDs der Checkboxen des SelectMultiples, die angehakt wurden.
|
||||||
Mit der eingebauten PHP-Funktion \enquote{array\_map} wenden wir nun eine Operation auf alle Schlüssel
|
Mit der eingebauten PHP-Funktion \enquote{array\_map} wenden wir nun eine Operation auf alle Schlüssel
|
||||||
der Liste an, die \enquote{strlen('formfeldname-')} Zeichen, von links ausgehend, von der Formfeld-ID
|
der Liste an, die \enquote{strlen('formfeldname-')} Zeichen, von links ausgehend, von der Formfeld-ID
|
||||||
entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \enquote{18} transformiert. Übrig bleiben die \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkente.
|
entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \enquote{18} transformiert. Übrig bleiben die \acp{UID} aller angehakten Elemente $a$, in Form einer Zeichenkente.
|
||||||
Über die eingebaute PHP-Funktion \enquote{intval} ist es trivial diese zu Zahlen zu übersetzen,
|
Über die eingebaute PHP-Funktion \enquote{intval} ist es trivial diese zu Zahlen zu übersetzen,
|
||||||
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
|
wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können.
|
||||||
|
|
||||||
|
\subsection{PDF- und QR-Code-Generierung}
|
||||||
|
Das dynamische Erstellen und Ausgeben des Versandbeilageblattes als PDF ist ein essenzieller Bestandteil des
|
||||||
|
Jahresauswahlprobenwerkzeuges, da dieses PDF die Schnittstelle zwischen ankommenden Weinen und dem System darstellt.
|
||||||
|
Daher ist der Profit, der durch dieses Werkzeug generiert wird, ohne dieses PDF stark eingeschränkt, da
|
||||||
|
einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten.
|
||||||
|
Wie im \fullref{chap:stand-der-forschung} erläutert, werden für die dynamische
|
||||||
|
Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und
|
||||||
|
\enquote{mpdf/mpdf} herangezogen und über Composer installiert.
|
||||||
|
|
||||||
|
\subsubsection{QR-Code-Generierung}
|
||||||
|
Der QR-Code beinhaltet lediglich die Wein-\ac{UID} anstatt einer vollständigen URL. Hintergrund dessen ist, dass
|
||||||
|
die URL, die benötigt ist, um einen Wein einzuscannen, bis auf die Wein-\ac{UID} immer identisch ist.
|
||||||
|
Somit wird redundanz vermieden.
|
||||||
|
Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} eine vollständige URL herzuleiten.
|
||||||
|
Um Resourcen zu sparen und somit den Profit zu erhöhen, wird der QR-Code zu einem Base64-kodiertem Bild gerendert.
|
||||||
|
Das ist der Standardrückgabewert des QR-Code-Generators
|
||||||
|
und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein Base64-kodiertes Bild als Quellurl eines
|
||||||
|
IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Hier wird der Profit erhöht, indem Arbeitszeit gespart wird,
|
||||||
|
die sonst in das anderweitige Einbetten eines Bildes in einem PDF mit \enquote{mpdf} fließen müsste.
|
||||||
|
Die QR-Codegenerierung funktioniert konkret, indem ein neues QRCode-Objekt der QRCode-Klasse erstellt wird.
|
||||||
|
Diese Klasse nimmt ein QROptions-Objekt im Konstruktor, das in diesem Falle einige Stilattribute mit sich trägt.
|
||||||
|
Das QRCode-Objekt bietet nun eine Methode \enquote{render} an, die, sofern nicht anders konfiguriert, den QR-Code als
|
||||||
|
Base64-kodiertes Bild zurückgibt \cite{bib:chillerlan-php-qrcode}.
|
||||||
|
|
||||||
|
\subsubsection{PDF-Generierung}
|
||||||
|
Firmenintern ist es Standard das Aussehen sowie die Inhalte der PDF-Dokumente, die \enquote{mpdf} erzeugt, mit HTML zu definieren,
|
||||||
|
das an \enquote{mpdf} gereicht wird. Um die Gestaltung und die Präsentation von Variablen in der HTML-Zeichenfolge technisch
|
||||||
|
kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten,
|
||||||
|
wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird,
|
||||||
|
diese mit TYPO3-Fluid befüllt wird und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten.
|
||||||
|
Hierfür wird ein TYPO3-StandaloneView instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben,
|
||||||
|
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert
|
||||||
|
\cite{bib:typo3-ref-standalone-view}.
|
||||||
|
Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor
|
||||||
|
konfiguriert. Diese Konfiguration definiert in diesem Falle Seitenabstände, Papierformat, Zeichenkodierung und Schriftarten.
|
||||||
|
Abschließend wird dem \enquote{mpdf}-Objekt das zuvor generierte HTML übergeben und über die Methode \enquote{OutputBinaryData}
|
||||||
|
als Bytes zurückgegeben und in einer Variable gespeichert \cite{bib:mpdf-ref}.
|
||||||
|
Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird ein TYPO3-Response-Objekt erstellt.
|
||||||
|
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser Header sind Content-Type und Content-Length.
|
||||||
|
Abschließend werden als Response-Body die Bytes des generierten PDFs abgeschickt. Damit ist die Verbindung beendet und das
|
||||||
|
PDF zum Nutzer übertragen.
|
||||||
|
@ -319,6 +319,14 @@
|
|||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:mpdf-ref,
|
||||||
|
author = {{Mpdf Contributors}},
|
||||||
|
howpublished = "\url{https://mpdf.github.io/reference/mpdf-functions/overview.html}",
|
||||||
|
title = {{Overview mPDF Functions by Category}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: März 2023}
|
||||||
|
}
|
||||||
|
|
||||||
@misc{bib:qrbot,
|
@misc{bib:qrbot,
|
||||||
author = {{TeaCapps}},
|
author = {{TeaCapps}},
|
||||||
howpublished = "\url{https://qrbot.net}",
|
howpublished = "\url{https://qrbot.net}",
|
||||||
@ -335,6 +343,14 @@
|
|||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:php-array-keys,
|
||||||
|
author = {{The PHP Group}},
|
||||||
|
howpublished = "\url{https://www.php.net/manual/en/function.array-keys.php}",
|
||||||
|
title = {{PHP: array-keys - Manual}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: März 2023}
|
||||||
|
}
|
||||||
|
|
||||||
@misc{bib:typo3-fluid,
|
@misc{bib:typo3-fluid,
|
||||||
author = {{TYPO3 Association}},
|
author = {{TYPO3 Association}},
|
||||||
howpublished = "\url{https://typo3.org/fluid}",
|
howpublished = "\url{https://typo3.org/fluid}",
|
||||||
@ -438,3 +454,11 @@
|
|||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-ref-standalone-view,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_1_1_standalone_view.html}",
|
||||||
|
title = {{TYPO3\\CMS\\Fluid\\View\\StandaloneView Class Reference}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: März 2023}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user