我正在与一个大会的组织人员合作,我们必须打印大量参与证书。所有这些证书都有相同的文字,除了参与者的姓名。我已经完成了一个证书,但为了避免手工制作一个一个,我想知道是否有任何方法可以在 Tex 中动态地完成这项工作,使用 *.xls 文件(其中有所有参与者的姓名)作为数据库。
有人做过类似的事情吗?可以给我一些关于从哪里开始的线索吗?
感谢全体成员!
答案1
获取或制作空白或部分填写的证书,例如 https://images.template.net/wp-content/uploads/2015/03/Free-Blank-Certificate-Template.jpg。
创建一个名称文件(可以从 xls 文件导出为 csv),读取它并使用它来循环遍历名称。
请注意,{c}{}{c}{}
中的参数\stackinset
定义了名称叠加层的精确位置——这里,字面意思是页面的中心。这可以调整。例如,{l}{50pt}{b}{100pt}
表示距离图像左侧 50 pt 和距离图像底部 100 pt。
\documentclass{article}
\usepackage[letterpaper,landscape,margin=0pt]{geometry}
\usepackage{filecontents,stackengine,graphicx,readarray}
\begin{filecontents*}{names.txt}
Joe Smith
Jane Doe
\end{filecontents*}
\ignoreemptyitems
\readarraysepchar{,}
\parindent 0pt
\begin{document}
\readdef{names.txt}\namelistdef
\readlist\thenamelist{\namelistdef}
\foreachitem\x\in\thenamelist{%
\stackinset{c}{}{c}{}{\sffamily\Large\x}{%
\includegraphics[width=\textwidth]{Free-Blank-Certificate-Template.jpg}}%
\clearpage%
}
\end{document}
人们可以变得更加复杂并输入多个字段,使用 csv 输入格式来输入数据。
可怜的简……等她妈妈发现吧!
\documentclass{article}
\usepackage[letterpaper,landscape,margin=0pt]{geometry}
\usepackage{filecontents,stackengine,graphicx,readarray}
\begin{filecontents*}{names.txt}
Joe Smith, 3-legged race
Jane Doe, chug-a-lug
\end{filecontents*}
\ignoreemptyitems
\readarraysepchar{\\}
\setsepchar{\\/,}
\parindent 0pt
\begin{document}
\readdef{names.txt}\namelistdef
\readlist\thenamelist{\namelistdef}
\foreachitem\x\in\thenamelist{%
\stackinset{c}{-75pt}{c}{-30pt}{\sffamily\Large\thenamelist[\xcnt,2]}{%
\stackinset{c}{}{c}{}{\sffamily\Large\thenamelist[\xcnt,1]}{%
\includegraphics[width=\textwidth]{Free-Blank-Certificate-Template.jpg}%
}}%
\clearpage%
}
\end{document}