1

Based on https://www.overleaf.com/latex/examples/mailmerged-business-cards/gnnhcjvkvcfd

I'm trying to implement a project that would generate small business cards based on a csv file. I created a code similar to here:

Print business cards in LaTeX

That is, compiling one business card to the first.pdf file, and for the next compilation inserting it into the second page so that you can cut them according to the pattern. But it does not meet my expectations, I want to achive only second side of my file and in addition not only one person's business card but one by one each line from the file. But not necessarily, I care more about small business cards, it can be one person's data.

mysample

My code:

%% 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 looks like: 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/,helena@univ.edu,hxr42@gmail.com,+1 123 456 7890,425B 030A B8D2 0316 CA1B 4709 CA83 5DDA EC31 CA56 data

  • 2
    Can you please add a data.csv file to your question without personal informations ? – Mensch Feb 24 at 9:56
  • 1
    I added at the bottom – bartzmc Feb 24 at 10:23
  • I will be happy also with solution that produce one person's small business cards. – bartzmc Feb 24 at 16:14
  • 1
    Well, you should explain your used code a little bit more, for example why image first? Which did you add and what do you think that it should do? Your code is far from beeing minimal and it is not easy to understand without explanation what you are doing/trying ... – Mensch Feb 24 at 16:53
  • First is a pdf document that is created by this sample project link It's single business card shown on first page. Then I'm using it on this project to put it on second page in a pattern. It's a two step process. I want these small business cards to be generated straight away from the file. – bartzmc Feb 24 at 17:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.