Dokumente aus einer Datenbank

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


karbon
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Di 11. Jan 2022, 19:55

Dokumente aus einer Datenbank

Beitrag von karbon »

Hallo zusammen,

für meinen Sportverein habe ich folgende fixe Idee:

Ich möchte die Erzeugung von Flyern automatisieren. Es gibt für (fast) jede/n Kurs/Trainingsgruppe einen Flyer, auf dem Titel, Termin, Kontaktdaten, Beschreibung und meist noch ein Foto stehen. Diese Informationen würde ich gern in eine "Datenbank" (z.B. SQL, git-Repository mit XML, da bin ich flexibel) schreiben und dann automatisch alle Flyer im einheitlichen Layout erzeugen. Da könnte Latex ganz gut funktionieren.

Die zweite Ausgabeform wären Broschüren, in denen dann z.B. alle Kurse oder eine bestimmte Auswahl (z.B. "Fussball", "Turnen", "Yoga"), aus den gleichen Daten erzeugt, stehen. Wenn man dann alles vorliegen hat, könnte man vielleicht auch mal "spontan" alles für 6-10jährige zusammen stellen, wenn in der Grundschule Aktionstag ist.

Die Vision ist, dass man an der Datenbank etwas ändert und dann stehen alle Flyer und Broschüren ganz aktuell als PDF bereit. Oft ändert sich nur eine Telefonnummer, aber dafür werden mindestens zwei Dokumente angefasst, zur Zeit in Word & Co, von verschiedenen Leuten, mit Rückfragen, nach der Arbeit usw.

Für Serienbriefe mit Latex habe ich CSV-basierte Lösungen gefunden. Ich glaube nicht, dass ich die Daten (speziell die Beschreibungen) damit abgebildet bekomme.

Hat vielleicht jemand eine Idee, mit welchen Techniken man den Quelltext erzeugen könnte? Gibt es Pakete für Templating?

gast.

Re: Dokumente aus einer Datenbank

Beitrag von gast. »

Das hängt jetzt eher davon ab, wie gut du im Umgang mit Datenbanken und Programmiersprachen bist. Man kann ja mit den meisten SQL Engines auch konfigurierbare Daten-Reports erstellen. SQL ist es dabei vollkommen egal, ob die erzeugte Text-Datei LaTeX-Befehle enthält oder nicht, ist ja auch nur Text.

Man kann aber natürlich auch einfach CSV exportieren und das dann von LaTeX-Seite beispielsweise mit datatool verarbeiten. Ob Serienbrief oder irgend ein anderes Dokument ist datatool Jacke wie Hose. Man muss dabei aber daran denken, jeweils Seitenzähler etc. am Anfang jedes einzelnen Dokuments wieder zurück zu setzen und bei doppelseitigen Dokumenten mit \cleardoublepage zu enden.

Man kann sich auch ein Python-Programm (oder perl-Skript oder VBasic-Programm oder …) schreiben, das sowohl die Datenbank ausliest als auch Platzhalter in einem Dokument durch die Daten aus der Datenbank ersetzt und die notwendigen LaTeX-Aufrufe durchführt.

Interessanter Weise kann man dafür theoretisch sogar pandoc missbrauchen. Das arbeitet nämlich für die Konvertierung von Dokumenten ebenfalls mit Templates, die über Variablen gesteuert werden. Es ist möglich, eigene Variablen per YAML oder Kommandozeile vorzugeben. Man könnte nun das Standard-LaTeX-Template default.latex durch ein Template ersetzen, das bereits Text mit Variablen enthält. Die Variablen müsste man dann passend aus der Datenbank befüllen.

Einfach sollte auch sein, aus der SQL-Datenbank Minidokumente zu generieren, die einen Satz von Befehlen definieren, etwa:
% Dateiname: Datensatz1.tex
\newcommand*{\DATAName}{Heinzelmann}
\newcommand*{\DATATelefon}{1234567}
Dann bastelt man sich ein Dokument, das diese Befehle an den variablen Stellen enthält:
% Dateiname: TemplateA.tex
\documentclass{article}
\begin{document}
\DATAName{} hat die Telefonnummer \DATATelefon.
\end{document}
Jetzt muss man nur noch bei den Aufrufen von LaTeX dafür sorgen, dass vor TemplateA.tex auch noch Datensatz<Nr>.tex geladen wird, beispielsweise, wenn man 5 Datensatz-Dokumente hat:
#!/usr/bin/bash
for n in {1..5}; do
  pdflatex -jobname Dokument$n '\input{'Datensatz$n.tex'} \input{TemplateA.tex}'
Für die Windows-Eingabeaufforderung oder PowerShell muss die Schleife und das Quoting passend ersetzt werden. Das Ergebnis hat man dann in Dokument1.pdf bis Dokument5.pdf.

Es gibt also viele Möglichkeiten und letztlich hängt der beste Weg von deinen Vorkenntnissen und deiner Bereitschaft ab, diese ggf. zu erweitern.

karbon
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Di 11. Jan 2022, 19:55

Re: Dokumente aus einer Datenbank

Beitrag von karbon »

Das ist jetzt Spaß am Experimentieren. Kommandozeilen und Programmiersprachen sind eigentlich kein Problem, aber ich will da auch nicht das Rad neu erfinden müssen.

CSV finde ich als Datenformat ungeeignet, weil die Kursbeschreibungen sicherlich irgendwie Zeichen enthalten, die das kaputt (oder das Parsen richtig ätzend) machen.

Die Bash-Latex-Variablen-Lösung funktioniert wahrscheinlich ganz gut für die einzelnen Flyer, aber die gleichen Daten für Broschüren zu verwenden, sehe ich damit leider nicht.

Ich hatte gehofft, dass es eine Templating-Engine im Latex-Umfeld gibt, die XML/YAML/etc. nimmt und sich auch auch gleich um alle Sonderzeichen kümmert.

Mir geht jetzt - auch wegen unzähliger verfügbarer Editoren - Markdown im Kopf herum. Das gibt es auch mit YAML-Metadaten im Kopf in der Welt von Jekyll und Hugo.

Antworten