[Tex/LaTex] Form/Serial/Merge letter – output to separate PDF files

letters

I am currently setting up a serial letter (ie. one letter/same content, multiple recipients). My current script outputs all pages in one, long PDF document. Is there way to make LaTeX generate separate PDFs, one for each letter?

Main TeX document:

% !TEX encoding = UTF-8 Unicode
\documentclass[11pt]{g-brief}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage{enumerate}
\usepackage{eurosym}
\usepackage{lmodern}
\usepackage{textcomp}

\usepackage[arrow, matrix, curve]{xy}

\usepackage{graphicx,type1cm,eso-pic,color}

\lochermarke
\faltmarken
%\fenstermarken
\trennlinien


\Name                {My Name}
\Strasse             {My Street 123}
\Zusatz              {}
\RetourAdresse       {}
\Ort                 {12345 Whereilive}
\Land                {}

\Telefon             {555-1212}
\Telefax             {555-1313}
\EMail               {some@address.com}

\Unterschrift        {My Name}

\Adresse             {
Some \\ Recipient\\Address}

\Betreff             {Why am I writing to You today?}

\Datum               {\today}
%\IhrZeichen          {} 
%\IhrSchreiben        {}
%\MeinZeichen         {cts 20100506.1}

\Anrede              {Sehr geehrte Damen und Herren,}
\Gruss               {Mit freundlichem Gruss,}{1cm}

\Anlagen             {\emph{Anlage: some other page}}

\newcommand{\BriefAn}[5]
{
  \newpage
  \Adresse{#1 #2\\ #3 \\\\ \textbf{#4}}


  \begin{g-brief}

\shorthandoff{"}

I would like to ask you this
\begin{enumerate}
\item yabber yabber
\item somme foobar
\item more yabber
\item more foobar
\item enough of this already
\end{enumerate}



  \end{g-brief}
}

\begin{document}
\input{Adressen.tex}
\end{document}

\endinput

Adressen.tex contains this:

\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}

Best Answer

You can exploit the write18 facility and invoke pdftk (link for pdftk) from within latex:

\documentclass{article}

\usepackage{filecontents}
%% ----------------- Your addresses here--------------------------
\begin{filecontents*}{Adressen.tex}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\BriefAn{Firstname}{Lastname}{Some Street 314}{12345 Somewhere}{m}
\end{filecontents*}
% ------------------main letter -- letters.tex here--------------------------------
\begin{filecontents*}{letters.tex}
% !TEX encoding = UTF-8 Unicode
\documentclass[11pt]{g-brief}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage{enumerate}
\usepackage{eurosym}
\usepackage{lmodern}
\usepackage{textcomp}

\usepackage[arrow, matrix, curve]{xy}

\usepackage{graphicx,type1cm,eso-pic,color}

\lochermarke
\faltmarken
%\fenstermarken
\trennlinien


\Name                {My Name}
\Strasse             {My Street 123}
\Zusatz              {}
\RetourAdresse       {}
\Ort                 {12345 Whereilive}
\Land                {}

\Telefon             {555-1212}
\Telefax             {555-1313}
\EMail               {some@address.com}

\Unterschrift        {My Name}

\Adresse             {
Some \\ Recipient\\Address}

\Betreff             {Why am I writing to You today?}

\Datum               {\today}
%\IhrZeichen          {} 
%\IhrSchreiben        {}
%\MeinZeichen         {cts 20100506.1}

\Anrede              {Sehr geehrte Damen und Herren,}
\Gruss               {Mit freundlichem Gruss,}{1cm}

\Anlagen             {\emph{Anlage: some other page}}

\newcommand{\BriefAn}[5]
{
  \newpage
  \Adresse{#1 #2\\ #3 \\\\ \textbf{#4}}


  \begin{g-brief}

\shorthandoff{"}

I would like to ask you this
\begin{enumerate}
\item yabber yabber
\item somme foobar
\item more yabber
\item more foobar
\item enough of this already
\end{enumerate}    
  \end{g-brief}
}

\begin{document}
\input{Adressen.tex}
\end{document}

\endinput
\end{filecontents*}
%----------------------------------------------------------------
% Compile your document
\immediate\write18{pdflatex letters}
%----------------------------------------------------------------
% Split in to individual pages
%\immediate\write18{pdftk letters.pdf burst allow Printing}
\makeatletter
\immediate\write18{pdftk letters.pdf burst allow Printing output letter-page-\@percentchar02d.pdf}
\makeatother
%----------------------------------------------------------------    
\begin{document}
  Check for the individual pages in different files with names \verb|letter-page-<page number>| in the same folder as this \verb|.tex| file.
\end{document}

Compile this with pdflatex. You will get 4 pdf files with names letter-page-<page number> in the same folder.

Related Question