LaTeX Dokument mit PHP erstellen
Hi Experten,
ich bastle mal wieder ein bisschen mit PHP herum. Jetzt würde ich gerne nach einem Klick auf einen Button ein Dokument (PDF) erstellen lassen. Die Daten mit der das Dokument gefüllt werden soll kommen aus einer Datenbank. Ich würde gerne LaTeX verwenden, da man dort ja sehr gute Gestaltungsmöglichkeiten hat.
Ich habe mir das grob so Vorgestellt:
Da stehe ich aber jetzt vor dem Problem, das ich das foreach ja nicht ausführen kann. Kennt jemand für solz ein Scenario eine gute Lösung, oder kann mir das an meinem Codebeispiel erklären.
Danke schon mal
ich bastle mal wieder ein bisschen mit PHP herum. Jetzt würde ich gerne nach einem Klick auf einen Button ein Dokument (PDF) erstellen lassen. Die Daten mit der das Dokument gefüllt werden soll kommen aus einer Datenbank. Ich würde gerne LaTeX verwenden, da man dort ja sehr gute Gestaltungsmöglichkeiten hat.
Ich habe mir das grob so Vorgestellt:
protected function getData() {
$sql="SELECT artikel,menge FROM testLager;";
$recordset = $this->db->query($sql);
if(!$recordset){
throw new Exception("Fehler bei der Abfrage",$sql);
}
$artikelArray = array();
while ($item = $recordset->fetch_assoc()) {
$artikel = $item['artikel'];
$menge = $item['menge'];
$artikelArray[$artikel] = $material;
}
$recordset->free();
return $artikelArray;
}
foreach ($variable as $key => $value) {
# code...
}
protected function generateFile() {
$artikelArray = $this->getData();
$inhalt="\\documentclass[a4paper]{article}\n
\usepackage{ngerman}\n
\begin{document}\n
foreach ($artikelArray as $key => $value) {
# code...
}
\\end{document}";
$datei =fopen("datei.tex","w");
fwrite($datei, $inhalt);
fclose($datei);
echo "In datei geschrieben";
shell_exec('pdflatex datei.tex');
}
Da stehe ich aber jetzt vor dem Problem, das ich das foreach ja nicht ausführen kann. Kennt jemand für solz ein Scenario eine gute Lösung, oder kann mir das an meinem Codebeispiel erklären.
Danke schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 311852
Url: https://administrator.de/contentid/311852
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
6 Kommentare
Neuester Kommentar
Hi,
Du darfst natürlich den foreach-Befehl nicht im String stehen lassen. Du hast zwei Möglichkeiten:
1) foreach dazu nutzen den String $inhalt aufzubauen. Suchbegriffe sind: Foreach String Concatenation
2) Den Aufruf von fwrite drei-teilen. Erstens: Latex header in $datei schreiben. Zweitens: foreach laufen lassen und in der Schleife fwrite aufrufen. Drittens: am ende noch einfmal ein fwrite für das "\end{document}".
mfg
Cthluhu
Du darfst natürlich den foreach-Befehl nicht im String stehen lassen. Du hast zwei Möglichkeiten:
1) foreach dazu nutzen den String $inhalt aufzubauen. Suchbegriffe sind: Foreach String Concatenation
2) Den Aufruf von fwrite drei-teilen. Erstens: Latex header in $datei schreiben. Zweitens: foreach laufen lassen und in der Schleife fwrite aufrufen. Drittens: am ende noch einfmal ein fwrite für das "\end{document}".
mfg
Cthluhu
Zitat von @tobmes:
Gibt es dennoch eine Möglichkeit, das ich innerhalb des LaTeX-Dokuments irgendwie steuern kann, wo die Sachen Landen? Ich würde nämlich lieber nur die Daten in das LaTeX-Dokument schmeissen, und nicht ein komplettes Dokument mit wirrem PHP-Code erstellen.
Was geht: du machst dir ein statische *.tex Datei und mit \include bindest du dir die mit PHP dynamisch erzeugten Code-Teile ein.Gibt es dennoch eine Möglichkeit, das ich innerhalb des LaTeX-Dokuments irgendwie steuern kann, wo die Sachen Landen? Ich würde nämlich lieber nur die Daten in das LaTeX-Dokument schmeissen, und nicht ein komplettes Dokument mit wirrem PHP-Code erstellen.
Es gäbe aber da noch luatex, damit kannst du in der *.tex Datei mit lua-Skripten arbeiten. Ob jetzt der LUA- oder PHP-Code weniger wirr ist musst du selber beurteilen.
Hallo,
wir erzeugen hier Berichte aus PHP mit Latex als PDF.
Diese beinhalten ca. 20 Bereiche mit Feldern und ca. 200 wiederholende Zeilen.
Ich habe dazu Templates mit Platzhaltern. Diese Dateien lese ich ein, ersetze im String die Felder mit Echtdaten und speichere das als neue latex-Datei. z.B. [[feldname_vorname]].
Stefan
wir erzeugen hier Berichte aus PHP mit Latex als PDF.
Diese beinhalten ca. 20 Bereiche mit Feldern und ca. 200 wiederholende Zeilen.
Ich habe dazu Templates mit Platzhaltern. Diese Dateien lese ich ein, ersetze im String die Felder mit Echtdaten und speichere das als neue latex-Datei. z.B. [[feldname_vorname]].
Stefan
Hallo,
In PHP benutzt ich primär file_get_contents und str_replace.
Template in String einlesen und im String Substrings ersetzten.
Das Template mit Platzhaltern erstellen.
Dann kann man es sich vorher anschauen.
In PHP benutzt ich primär file_get_contents und str_replace.
Template in String einlesen und im String Substrings ersetzten.
Das Template mit Platzhaltern erstellen.
Dann kann man es sich vorher anschauen.
\begin{center}
\vspace*{4.0cm}
\includegraphics[width=0.7\textwidth]{images/LogoKreisGross.png} %70% der Textbreite
\vspace*{2.0cm}
Report for\\
Tag-Chapter-0-0-Text-Name\\
Tag-Chapter-0-0-Text-CompanyName\\
\vspace*{1.0cm}
Completed on Tag-Chapter-0-0-Text-Date
\end{center}
\textbf{What are the personal strengths of your friend in the personal life?}\\
%Tag-Chapter-7-4-Block-0-Start
Tag-Text\\\\
%Tag-Chapter-7-4-Block-0-End