![根据 csv 文件生成小型名片](https://linux22.com/image/391147/%E6%A0%B9%E6%8D%AE%20csv%20%E6%96%87%E4%BB%B6%E7%94%9F%E6%88%90%E5%B0%8F%E5%9E%8B%E5%90%8D%E7%89%87.png)
基于 https://www.overleaf.com/latex/examples/mailmerged-business-cards/gnnhcjvkvcfd
我正在尝试实现一个基于 csv 文件生成小型名片的项目。我创建了类似于此处的代码:
也就是说,将一张名片编辑到第一个.pdf 文件中,然后在下一个编辑中将其插入到第二页,以便您可以按照模式进行剪切。但这不符合我的期望,我只想获得文件的第二面,此外,不仅仅是一个人的名片,而是文件中的每一行。但不一定,我更关心小名片,它可以是一个人的数据。
我的代码:
%% This example is adapted from the "Business Cards for Programmers/Developers" example at
% https://www.overleaf.com/latex/templates/business-cards-for-programmers-slash-developers/wrwgsnnmxwyg.
% Instructions are at the end of the file.
\documentclass[11pt,a4paper]{memoir}
% \setstocksize{297mm}{210mm} % UK Stock size
\setstocksize{55mm}{85mm} % UK Stock size
\setpagecc{55mm}{85mm}{*}
\settypeblocksize{45mm}{75mm}{*}
\setulmargins{5mm}{*}{*}
\setlrmargins{5mm}{*}{*}
\usepackage{xcolor}
\usepackage{datatool}
%% The "database" is a comma-separated values (CSV) file.
%% The first line should contain the column headers, without space characters, e.g.
%% Name,JobTitle,Department
%%
%% If a field value contains a comma, then the field value needs to be surrounded with double quotes, e.g.
%% John Smith,Lecturer,"School of Science, Mathematics and Engineering"
%%
%% Spreadsheet applications can usually export such a .csv file.
%%
%% If field values are expected to contain LaTeX special characters like $, &, then use \DTLloadrawdb{data}.csv instead.
\DTLloaddb{namelist}{data.csv}
\setheadfoot{0.1pt}{0.1pt}
\setheaderspaces{1pt}{*}{*}
\usepackage{fontspec}
\setmainfont[]{Garamond12-Regular.ttf}
\checkandfixthelayout[fixed]
\pagestyle{empty}
\usepackage{pstricks}
\usepackage{auto-pst-pdf,pst-barcode}
%% These packages only for typesetting the instructions
\usepackage{listings}
\usepackage{enumitem}
% \usepackage [a4,cross,cam,frame] {crop}
%*******************************************************************************************
\usepackage{stackengine}
% \usepackage{showframe}
\usepackage{graphicx}
\newlength\plusheight
\newlength\stackvgap
%%%
\def\myvgap{1ex}
\def\myhgap{1ex}
%%%
% \addtolength\textheight{210mm}
\def\myimg{\protect\includegraphics[scale=1.0]{first}}
% \def\myimg{\protect\rule{1in}{1in}}% THIS CAN BE USED TO CHECK GAP SPACING
\def\myimgwd{\widthof{\myimg}-\widthof{+}}
\def\imgline{\myimg\protect\hspace{\myhgap}\myimg}
\def\seperatorline{+\protect\rule{\myimgwd+\myhgap}{0pt}+\protect\rule{\myimgwd+\myhgap}{0pt}+}
\setlength\plusheight{\heightof{+}}
\addtolength\plusheight{\depthof{+}}
\setlength\stackvgap{\myvgap-\the\plusheight}
\setlength\stackvgap{.5\stackvgap}
\setstackgap{S}{\the\stackvgap}
\pagestyle{empty}
\usepackage{scrextend}
%*******************************************************************************************
\begin{document}
%% For each line in namelist (which was loaded from data.csv),
%% output the following text (with mailmerged field values)
\DTLforeach{namelist}{%
%% Map each column header in your .csv file to a command
\Name=Name,%
\Subtitle=Subtitle,%
\Division=Division,%
\Employer=Employer,%
\JobTitle=JobTitle,%
\SpecialityOne=Speciality1,%
\SpecialityTwo=Speciality2,%
\SpecialityThree=Speciality3,%
\Web=Web,%
\EmailOne=Email1,%
\EmailTwo=Email2,%
\Mobile=Mobile,%
\GPG=GPG%
}{%%% Start designing your output text!
%%% Mailmerged field values can be inserted using the commands
%%% you've just mapped above.
\begin{Spacing}{0.75}%
\noindent
\textbf{\Name}\\[3pt]
\tiny\mbox{}\Subtitle \hfill {\color{gray}\Division{} / \Employer}\\
\rule{\textwidth}{.3mm}\\
\begin{minipage}[t]{30mm}
\vspace{-0mm}%
\begin{pspicture}(25mm,25mm)
% The MECARD format is used to exchange contact information. More information at:
% https://www.nttdocomo.co.jp/english/service/developer/make/content/barcode/function/application/addressbook/index.html
\psbarcode{MECARD:N:\Name;URL:\Web;EMAIL:\EmailOne;TEL:\Mobile;NOTE:GPG key fingerprint: \GPG;}{eclevel=L width=1 height=1}{qrcode}
\end{pspicture}
\end{minipage}
\hspace{1mm}
\begin{minipage}[t]{42mm}
\vspace{-0mm}%
\begin{flushleft}
{\scriptsize
\begin{Spacing}{1}%
\textbf{\JobTitle}\\[5mm]
% \hspace{5mm}\mbox{}\SpecialityOne\\
\mbox{}\SpecialityOne\\
\mbox{}\SpecialityTwo\\
\mbox{}\SpecialityThree \vspace{2mm}\\
\end{Spacing}
}
{\tiny
\begin{tabular}{@{}rl@{}l}
% {\color{gray}web}: & \Web & \\
{\color{gray}email}: & \EmailOne & \\
% {\color{gray}email}: & \EmailTwo & {\color{gray}\,(priv)}\\
{\color{gray}mobile}:& \Mobile & \\
\end{tabular}
\vspace*{2mm}
}
\end{flushleft}
\end{minipage}
\rule{74mm}{0mm}\\
\texttt{\fontsize{2.84mm}{3.55mm}\selectfont \GPG} % GPG KEY ID
\end{Spacing}
% \clearpage
}
%% Comment out this line when typesetting for final output
% \input{instructions}
\eject \pdfpagewidth=210mm \pdfpageheight=297mm
\leftskip10mm
\vspace*{-28pt}
% \centering
\vfill
\Shortstack{%
{\seperatorline}
{\imgline} {\seperatorline}
{\imgline} {\seperatorline}
{\imgline} {\seperatorline}
{\imgline} {\seperatorline}
{\imgline} {\seperatorline}}
\vfill
\end{document}
Data.csv 如下所示:
Name,Subtitle,Division,Employer,JobTitle,Speciality1,Speciality2,Speciality3,Web,Email1,Email2,Mobile,GPG {Helena Doe},subtitle,Division,Employer,Job Title,Speciality 1,Speciality 2,Speciality 3,https://fqdn/,[email protected],[email protected],+1 123 456 7890,425B 030A B8D2 0316 CA1B 4709 CA83 5DDA EC31 CA56