PDFs mit Daten aus einer speziellen Spalte in einer tabellenbasierten Datenbank (wie Excel) + Bilder

PDFs mit Daten aus einer speziellen Spalte in einer tabellenbasierten Datenbank (wie Excel) + Bilder

Ich bin ziemlich neu in Tex, aber jetzt muss ich:

  • mehrere PDFs mit gleichem Layout zusammenstellen(nicht so wichtig, wenn physisch in verschiedenen Dateien oder nur als Seiten in einer Datei getrennt)
  • aus 1 Datenspalte einer tabellarischen Datenbank(im Moment eine Excel-Tabelle mit drei Spalten: Englisch + Deutsch, mit Definitionen + Bild) (die Daten werden von jemand anderem ausgefüllt und ändern sich alle paar Monate)
  • Undmit einem Bild verbunden(was im Text erklärt wird, daher beide Spalten mit dem gleichen Bild in der dritten Spalte)

beim Durchsuchen der Fragen hier habe ich mehrere Lösungen gefunden, die mit CSV-Dateien, Photon und Luatex funktionieren (wie:Importieren Sie Daten aus einer Tabelle in Latex und erstellen Sie mehrere PDF-Dateien für jede Zeile in LaTeX ) - alles Sachen, von denen ich noch nie gehört habe ;) aber ich bin bereit, das zu lernen. Und ich werde mich bei Bedarf damit beschäftigen. Das Problem ist, dass ich nicht weiß, wo ich anfangen soll. Und außerdem habe ich das Gefühl, dass das Bild ein Problem sein wird, da Bilder in Excel nicht in die Zellen eingebunden werden und daher nicht gelesen werden. Also muss ich wahrscheinlich erst einmal ein ganz anderes Tool für die Tabelle verwenden. Und dann gäbe es sowieso einen ganz anderen Weg.

Also meine Fragen:

  1. welches Programm zum Erstellen der Tabelle verwendet werden soll (das wird jemand anderes machen, also sollte es für ihn nicht zu kompliziert oder teuer sein, wenn möglich, wäre etwas Einfaches und Gewöhnliches wie Excel großartig)
  2. und dann natürlich, wie man damit beginnt, es in Latex zu integrieren – Sie müssen mir nicht noch einmal eine bereits gegebene Antwort geben, ich bin bereit, die bereits vorhandenen Fragen und Antworten hier durchzulesen, aber es gibt so viele und mit meinem begrenzten Wissen darüber wäre es toll, einen Hinweis zu bekommen, welche der gegebenen Antworten ich ausprobieren sollte.
  3. und das Layout des endgültigen PDFs in der TEX-Datei zu ändern, sollte immer noch möglich sein, aber ich schätze, das würde mit jeder Lösung funktionieren.

hier eine Skizze wie eines der PDFs am Ende aussehen könnte:Karte1 Beispieltabelle:Excel-Tabelle

Ich hoffe, ich konnte meine Probleme klar darstellen. Vielen Dank für Ihre Hilfe!

Antwort1

habe eine Lösung mit dem Datatool-Paket gefunden. Sie ist noch nicht perfekt, aber vielleicht hast du ein paar Ideen zur Verbesserung?

Ich habe alle Bilder in einem Ordner und benutze

ls /b *.jpeg >pix.csv 

um eine CSV-Datei aller Bilder zu erstellen. (arbeitet auf einem Mac)

Dann lade ich das und die Spalte, die ich verwenden möchte (vor dem Speichern als CSV), in meine TEX-Datei und füge sie zusammen.

Zum Schluss führe ich für jede Zeile ein Tikzpicture aus, um die einzelnen Karten zu generieren.

\documentclass{standalone}

\usepackage{graphicx}
\usepackage{tikz}
\usepackage{datatool}

\DTLloaddb[
  noheader,
  keys={name}
  ]{pix}{pix.csv}

 \DTLloaddb[
  noheader,
  keys={title}
  ]{text}{text.csv}

\begin{document}

\newcount\rowIdx

\dtlforcolumn{\secondC}{text}{title}%\dtlforcolumn{?cs?}{?db?}{?key?}{?body?}
{
  % iterate through each entry in the `title' column of the text database
  \advance\rowIdx by 1\relax
  % get corresponding row of pix database
  \dtlgetrow{pix}{\rowIdx}%
  % append to current row (this new column is assigned the key `title')
  \dtlappendentrytocurrentrow{title}{\secondC}%\dtlappendentrytocurrentrow{?key?}{?value?}
  % update first database
  \dtlrecombine
}


\DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
    [\not\DTLiseq{\Name}{main.tex}]  
    {pix}{\Name=name,\Title=title}{
  \newpage
    \begin{tikzpicture}[remember picture,overlay]

        \node[anchor=south,inner sep=0pt] (icon) at (7.4,-8.5){\includegraphics[height=5cm]{\Name}}; %inserting the picture according to name

        \node[inner sep=0,text width=\paperwidth,align=flush center] (text) at (7.4,-9){\Title};

    \end{tikzpicture}  
 }

\end{document}

da sind ein paar Fehler drin, in der Zeile \end{tikzpicture} fehlt eine \endgroup und eine } und dann steht am Ende, es sind zu viele } aber ich verstehe nicht warum? Und wenn ich die \endgroup in meine .tex schreibe, steht da, es sind zu viele. Also so funktioniert es, da die fehlenden Teile automatisch ergänzt werden, aber ich muss immer Enter drücken, um die Änderungen zu übernehmen. Wahrscheinlich kann hier jemand von euch helfen.

vielen Dank!

Antwort2

die obige Antwort funktioniert nur für eine Sprache, aber hier nun meine Lösung für zwei Sprachen (mit Untertiteln), wie in der Frage gestellt und mit einer Level-Option. Die Person, die die Tabelle erstellt, muss in die letzte Spalte den Dateinamen des Bildes schreiben, anstatt das Bild einzufügen, und dann funktioniert es einwandfrei.

\documentclass[english]{article}

\usepackage[paperwidth=11cm, paperheight=10.4cm]{geometry}

\usepackage{graphicx}
\usepackage{tikz}
\graphicspath{{../pix/}}
\usepackage{datatool}
\usepackage{etoolbox}

\newbool{GER}
%\booltrue{GER} % if german version activate
\newcommand{\Levelgew}{1} % say which level (if you say level 2 it will print level1+2)

\DTLsetseparator{;}
\DTLloaddb[keys={level,eng,engunderline,ger,gerunderline,name}]{cards}{_scrumflowcards.csv} %\DTLloadrawdb[?options?]{?db name?}{?filename?} 



\begin{document}
\ifbool{GER}
{
    \DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
        [\not\DTLisgt{\Level}{\Levelgew}]
        {cards}{\Level=level,\Title=ger,\Underline=gerunderline,\Name=name}
        {
            \clearpage%start a new page for each row
            \thispagestyle{empty}%get rid of the pagenumbers

            \begin{tikzpicture}[remember picture,overlay]

                \node[yshift=-2.2cm,anchor=south] (icon) at (current page.center) {\includegraphics[height=6cm]{\Name}};

                \node[yshift=-3.5cm,text width=8cm,align=flush center] (text) at (current page.center){\huge\bfseries\sffamily\Title\\[15pt]
            \LARGE \Underline};

            \end{tikzpicture}
        }

}{
    \DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
        [\not\DTLisgt{\Level}{\Levelgew}]
        {cards}{\Level=level,\Title=eng,\Underline=engunderline,\Name=name}
        {
            \clearpage%start a new page for each row
            \thispagestyle{empty}%get rid of the pagenumbers

            \begin{tikzpicture}[remember picture,overlay]

                \node[yshift=-2.2cm,anchor=south] (icon) at (current page.center) {\includegraphics[height=6cm]{\Name}};

                \node[yshift=-3.5cm,text width=8cm,align=flush center] (text) at (current page.center){\huge\bfseries\sffamily\Title\\[15pt]
            \LARGE \Underline};

            \end{tikzpicture}
        }
}
\end{document}

am Ende habe ich das pgf-Paket (\pgfpagesphysicalpageoptions und \pgfpageslogicalpageoptions) verwendet, um mehrere Karten/Seiten auf ein A4-Blatt zu drucken.

verwandte Informationen