PDF-файлы с данными из специального столбца в табличной базе данных (например, Excel) + изображения

PDF-файлы с данными из специального столбца в табличной базе данных (например, Excel) + изображения

Я совсем новичок в тексе, но теперь мне предстоит:

  • скомпилировать несколько PDF-файлов с одинаковым макетом(не столь важно, если они физически разделены на разные файлы или просто как страницы в одном файле)
  • из 1 столбца данных табличной базы данных(на данный момент таблица Excel с тремя столбцами: английский + немецкий, содержащая определения, + изображение) (данные заполняются кем-то другим и меняются каждые несколько месяцев)
  • исвязанный с изображением(того, что объяснено в тексте, поэтому обе колонки с одинаковой картинкой в ​​третьей колонке)

Просматривая вопросы здесь, я нашел несколько решений, работающих с файлами .csv, photon и luatex (например:Импортируйте данные из электронной таблицы в LaTeX и создавайте несколько файлов PDF для каждой строки в LaTeX. ) - все это я никогда не слышал ;) но я готов учиться. И я буду проходить это по мере необходимости. Проблема в том, что я не знаю, с чего начать. И, кроме того, у меня есть ощущение, что картинка будет проблемой, так как картинки не включены в ячейки в Excel, поэтому они никак не будут прочитаны. Так что, вероятно, мне придется использовать совершенно другой инструмент для таблицы в первую очередь. И тогда в любом случае будет совершенно другой способ.

Итак, мои вопросы:

  1. какую программу следует использовать для создания таблицы (это сделает кто-то другой, поэтому для него это не должно быть слишком сложным или дорогим; если возможно, лучше использовать что-то простое и распространенное, например Excel)
  2. и, конечно, как начать переносить это в латекс - вам не нужно снова давать мне уже данный ответ, я готов прочитать уже существующие здесь вопросы и ответы, но их так много, и с моими ограниченными знаниями обо всем этом было бы здорово получить подсказку, какой из данных ответов попробовать.
  3. и изменить макет окончательного PDF-файла в файле .tex все еще возможно, но я полагаю, что это будет работать с любым решением.

Вот набросок того, как один из PDF-файлов может выглядеть в конечном итоге:карта1 пример таблицы:Лист Excel

Надеюсь, я смог прояснить свои проблемы. Большое спасибо за помощь!

решение1

нашел решение с помощью пакета datatool. Пока не идеально, но, возможно, у вас есть идеи по улучшению?

У меня все фотографии в папке и я использую

ls /b *.jpeg >pix.csv 

для создания .csv всех изображений. (работает на Mac)

Затем я загружаю его и столбец, который хочу использовать (ранее сохраненный как .csv), в свой .tex и объединяю их.

Наконец, я запускаю tikzpicture для каждой строки, чтобы сгенерировать отдельные карточки.

\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}

есть несколько ошибок, в строке \end{tikzpicture} отсутствует \endgroup и }, а затем в конце говорится, что их слишком много }, но я не понимаю, почему? И если я пишу \endgroup в своем .tex, он говорит, что их слишком много. Так что это работает так, поскольку отсутствующие части добавляются автоматически, но мне всегда приходится нажимать Enter, чтобы принять изменения. Возможно, кто-то из вас может помочь здесь.

большое спасибо!

решение2

ответ выше отлично работает только для одного языка, но вот мое решение для двух языков (с субтитрами), как и в вопросе, и вариант уровня. Человек, создающий таблицу, должен написать в последнем столбце имя файла изображения вместо того, чтобы вставлять само изображение, и тогда все работает отлично.

\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}

в конце я использовал pgfpackage (\pgfpagesphysicalpageoptions и \pgfpageslogicalpageoptions), чтобы напечатать несколько карточек/страниц на одном листе бумаги формата А4.

Связанный контент