pdfs com dados de uma coluna especial em um banco de dados baseado em tabela (como Excel) + imagens

pdfs com dados de uma coluna especial em um banco de dados baseado em tabela (como Excel) + imagens

Sou bastante novo no tex, mas agora preciso:

  • compilar vários pdfs com o mesmo layout(não é tão importante se separados fisicamente em arquivos diferentes ou apenas como páginas em um arquivo)
  • de 1 coluna de dados de um banco de dados baseado em tabela(no momento uma planilha excel com a coluna: Inglês + Alemão, contendo definições, + imagem) (os dados são preenchidos por outra pessoa e mudam a cada mês)
  • econectado com uma imagem(do que está explicado no texto, então ambas as colunas com a mesma imagem na terceira coluna)

pesquisando as questões aqui encontrei diversas soluções trabalhando com arquivos .csv, photon e luatex (como:Importe dados de uma planilha para o Latex e crie vários arquivos PDF para cada linha no LaTeX ) - todas as coisas que nunca ouvi falar;) mas estou disposto a aprender. E vou trabalhar nisso conforme necessário. O problema é que não sei por onde começar. E além disso tenho a sensação de que a imagem vai ser um problema, pois as imagens não estão incluídas nas células do Excel, por isso não serão lidas de forma alguma. Então provavelmente eu terei que usar uma ferramenta completamente diferente para a mesa em primeiro lugar. E então haveria uma maneira totalmente diferente de qualquer maneira.

Então, minhas perguntas:

  1. qual programa deve ser usado para gerar a tabela (outra pessoa fará isso, então não deve ser muito complicado ou caro para ela, se possível, algo fácil e comum como o Excel seria ótimo)
  2. e, claro, como começar a trazê-lo para o látex - você não precisa me dar uma resposta já dada novamente, estou disposto a ler as perguntas e respostas já existentes aqui, mas há tantas e com meu conhecimento limitado sobre tudo isso, seria ótimo ter uma dica de qual das respostas fornecidas tentar.
  3. e alterar o layout do pdf final no arquivo .tex ainda deve ser possível, mas acho que funcionaria com todas as soluções.

aqui está um esboço de como um dos pdfs ficaria no final:cartão1 tabela de exemplo:planilha excel

Espero ter conseguido esclarecer meus problemas. Muito obrigado por sua ajuda!

Responder1

encontrei uma solução usando o pacote datatool. Ainda não está perfeito, mas provavelmente você tem algumas ideias para melhorias?

Eu tenho todas as fotos em uma pasta e uso

ls /b *.jpeg >pix.csv 

para gerar um .csv de todas as fotos. (trabalhando em um Mac)

Então carrego isso e a coluna que desejo usar (antes salva como .csv) em meu .tex e mesclo-os.

Por fim, executo um tikzpicture para cada linha para gerar os cartões individuais.

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

tem alguns erros, na linha do \end{tikzpicture} falta um \endgroup e um } e no final diz que tem muitos } mas não entendo por quê? E se eu escrever \endgroup no meu .tex ele diz que é demais. Então está funcionando assim, pois as partes que faltam são adicionadas automaticamente, mas sempre tenho que apertar enter para aceitar as alterações. Provavelmente um de vocês pode ajudar aqui.

muito obrigado!

Responder2

a resposta acima funciona bem para apenas um idioma, mas aqui está minha solução para dois idiomas (com legendas), como solicitado na pergunta e uma opção de nível. A pessoa que faz a tabela tem que escrever na última coluna o nome do arquivo da foto ao invés de colocar a foto e aí funciona bem.

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

no final usei o pgfpackage (\pgfpagesphysicalpageoptions e \pgfpageslogicalpageoptions) para imprimir vários cartões/páginas em um papel/folha A4.

informação relacionada