테이블 기반 데이터베이스(예: Excel)의 특수 열 데이터가 포함된 PDF + 그림

테이블 기반 데이터베이스(예: Excel)의 특수 열 데이터가 포함된 PDF + 그림

저는 tex를 처음 접했지만 이제 다음을 수행해야 합니다.

  • 동일한 레이아웃으로 여러 PDF를 컴파일(물리적으로 다른 파일로 분리되거나 한 파일의 페이지로 분리된 경우에는 그다지 중요하지 않음)
  • 테이블 기반 데이터베이스의 데이터 1열에서(현재 열이 있는 Excel 시트: 영어 + 독일어, 정의 포함, + 그림) (데이터는 다른 사람에 의해 채워지고 가끔씩 변경됩니다)
  • 그리고사진으로 연결(본문에 설명된 내용 중 두 열 모두 세 번째 열에 동일한 그림이 있음)

여기에서 질문을 검색하면서 .csv 파일, photon 및 luatex를 사용하는 몇 가지 솔루션을 찾았습니다(예:스프레드시트의 데이터를 Latex로 가져오고 LaTeX의 각 행에 대해 여러 PDF 파일을 만듭니다. ) - 내가 들어본 적이 없는 모든 것들 ;) 하지만 나는 기꺼이 배울 의향이 있습니다. 그리고 필요하다면 그 문제를 해결하겠습니다. 문제는 이제 어디서부터 시작해야 할지 모르겠다는 것입니다. 게다가 Excel의 셀에 그림이 포함되지 않아 어떤 식으로든 읽을 수 없기 때문에 그림이 문제가 될 것이라는 느낌이 듭니다. 그래서 처음에는 테이블에 완전히 다른 도구를 사용해야 할 것 같습니다. 그리고 어쨌든 완전히 다른 방법이 있을 것입니다.

내 질문은 다음과 같습니다.

  1. 테이블을 생성하는 데 어떤 프로그램을 사용해야 합니까? (다른 사람이 그렇게 할 것이므로 복잡하거나 비용이 많이 들지 않아야 합니다. 가능하다면 Excel처럼 쉽고 일반적인 것이 좋을 것입니다.)
  2. 그리고 라텍스로 가져오기 시작하는 방법은 물론입니다. 이미 주어진 답변을 다시 제공할 필요는 없습니다. 여기에 이미 존재하는 질문과 답변을 기꺼이 읽어보고 싶지만 너무 많고 지식이 제한되어 있습니다. 그것에 대해 주어진 답변 중 어떤 것을 시도할지 힌트를 얻는 것이 좋을 것입니다.
  3. .tex 파일에서 최종 PDF의 레이아웃을 변경하는 것은 여전히 ​​가능하지만 모든 솔루션에서 작동할 것 같습니다.

여기 PDF 중 하나가 마지막에 어떻게 보일지 스케치합니다.카드1 예제 테이블:엑셀 시트

나는 내 문제를 분명히 할 수 있기를 바랍니다. 도와 주셔서 정말로 고맙습니다!

답변1

datatool 패키지를 사용하여 솔루션을 찾았습니다. 아직 완벽하지는 않지만 개선을 위한 아이디어가 있으신가요?

사진은 다 폴더에 담아서 사용하고 있어요

ls /b *.jpeg >pix.csv 

모든 사진의 .csv를 생성합니다. (맥에서 작업 중)

그런 다음 해당 항목과 사용하려는 열(.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이 누락되고 }가 있는데 결국에는 많은 }가 있다고 하는데 왜 그런지 이해가 안 됩니까? 그리고 .tex에 \endgroup을 쓰면 너무 많다고 나옵니다. 누락된 부분이 자동으로 추가되므로 이렇게 작동하지만 변경 사항을 적용하려면 항상 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)를 사용하여 하나의 a4 용지/시트에 여러 개의 카드/페이지를 인쇄했습니다.

관련 정보