包含來自基於表格的資料庫(如 Excel)中特殊列的資料的 pdf + 圖片

包含來自基於表格的資料庫(如 Excel)中特殊列的資料的 pdf + 圖片

我對 tex 很陌生,但現在我必須:

  • 編譯多個具有相同佈局的 pdf(如果物理上分開在不同的文件中或就像一個文件中的頁面一樣,則不太重要)
  • 來自基於表格的資料庫的 1 列數據(目前有一個Excel表,其中包含:英語+德語,包含定義,+圖片)(資料是由其他人填寫的,並且每隔幾個月就會改變)
  • 與圖片相連(文本中解釋的內容,因此兩列在第三列中具有相同的圖片)

在這裡搜尋問題,我發現了幾種使用 .csv 檔案、photon 和 luatex 的解決方案(例如:將資料從電子表格匯入到 Latex 中,並為 LaTeX 中的每一行建立多個 pdf 文件 ) - 所有我從未聽說過的東西;)但我願意學習。我會根據需要解決這些問題。問題是,我現在不知道從哪裡開始。而且我有一種感覺,圖片將是一個問題,因為圖片不包含在Excel的單元格中,所以它們不會以任何方式被讀取。因此,我可能必須先對錶格使用完全不同的工具。然後無論如何都會有一種完全不同的方式。

所以我的問題是:

  1. 應該使用哪個程式來產生表格(其他人會這樣做,所以對他們來說不應該太複雜或昂貴,如果可能的話,像excel這樣簡單和常見的東西會很棒)
  2. 然後當然如何開始將其​​引入乳膠 - 你不需要再次給我一個已經給出的答案,我願意閱讀這裡已經存在的問題和答案,但有太多並且我的知識有限關於這一切,如果能得到嘗試給出的答案中的哪個提示,那就太好了。
  3. 並更改 .tex 檔案中最終 pdf 的佈局仍然是可能的,但我想這適用於每個解決方案。

這裡是其中一個 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 和 },最後它說有很多 } 但我不明白為什麼?如果我在 .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 和 \pgfpageslogicpageoptions)在一張 a4 紙/紙上列印多個卡片/頁面。

相關內容