5

When writing a cv I decided to separate tex file from content. I copied the content to a csv file in order to load it with datatool.

But this greatly increases the size of the PDF:

  1. Complete content directly in tex code. Size: 101 Kb.
  2. Externalize the content to an csv file. Size: 5.093 kb.

MWE compiled with pdflatex:

\documentclass{scrreprt}

\usepackage[T1]{fontenc}% Use 8-bit encoding that has 256 glyphs
\usepackage[utf8]{inputenc}% Uses the utf8 input encoding
\usepackage{datatool}
\usepackage{filecontents}% added to write additional files.
\usepackage{hyperref}

% Massive lines to show the differences in this file
\begin{document}
\begin{filecontents}{dbload.tex}
\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}
\DTLgetvalueforkey{\Langaugecode}{c\langselectkey}{cv}{c1}{Langaugecode}
\typeout{Loading A}
\DTLgetvalueforkey{\chapterAtestaaaa}{c\langselectkey}{cv}{c1}{chapterAtestaaaa}
\DTLgetvalueforkey{\chapterAtestaaab}{c\langselectkey}{cv}{c1}{chapterAtestaaab}
\DTLgetvalueforkey{\chapterAtestaaac}{c\langselectkey}{cv}{c1}{chapterAtestaaac}
\DTLgetvalueforkey{\chapterAtestaaad}{c\langselectkey}{cv}{c1}{chapterAtestaaad}
\DTLgetvalueforkey{\chapterAtestaaae}{c\langselectkey}{cv}{c1}{chapterAtestaaae}
\DTLgetvalueforkey{\chapterAtestaaaf}{c\langselectkey}{cv}{c1}{chapterAtestaaaf}
\DTLgetvalueforkey{\chapterAtestaaag}{c\langselectkey}{cv}{c1}{chapterAtestaaag}
\DTLgetvalueforkey{\chapterAtestaaah}{c\langselectkey}{cv}{c1}{chapterAtestaaah}
\DTLgetvalueforkey{\chapterAtestaaai}{c\langselectkey}{cv}{c1}{chapterAtestaaai}
\DTLgetvalueforkey{\chapterAtestaaaj}{c\langselectkey}{cv}{c1}{chapterAtestaaaj}
\DTLgetvalueforkey{\chapterAtestaaak}{c\langselectkey}{cv}{c1}{chapterAtestaaak}
\DTLgetvalueforkey{\chapterAtestaaal}{c\langselectkey}{cv}{c1}{chapterAtestaaal}
\DTLgetvalueforkey{\chapterAtestaaam}{c\langselectkey}{cv}{c1}{chapterAtestaaam}
\typeout{Loading B}
\DTLgetvalueforkey{\chapterBtestaaaa}{c\langselectkey}{cv}{c1}{chapterBtestaaaa}
\DTLgetvalueforkey{\chapterBtestaaab}{c\langselectkey}{cv}{c1}{chapterBtestaaab}
\DTLgetvalueforkey{\chapterBtestaaac}{c\langselectkey}{cv}{c1}{chapterBtestaaac}
\DTLgetvalueforkey{\chapterBtestaaad}{c\langselectkey}{cv}{c1}{chapterBtestaaad}
\DTLgetvalueforkey{\chapterBtestaaae}{c\langselectkey}{cv}{c1}{chapterBtestaaae}
\DTLgetvalueforkey{\chapterBtestaaaf}{c\langselectkey}{cv}{c1}{chapterBtestaaaf}
\DTLgetvalueforkey{\chapterBtestaaag}{c\langselectkey}{cv}{c1}{chapterBtestaaag}
\DTLgetvalueforkey{\chapterBtestaaah}{c\langselectkey}{cv}{c1}{chapterBtestaaah}
\DTLgetvalueforkey{\chapterBtestaaai}{c\langselectkey}{cv}{c1}{chapterBtestaaai}
\DTLgetvalueforkey{\chapterBtestaaaj}{c\langselectkey}{cv}{c1}{chapterBtestaaaj}
\DTLgetvalueforkey{\chapterBtestaaak}{c\langselectkey}{cv}{c1}{chapterBtestaaak}
\DTLgetvalueforkey{\chapterBtestaaal}{c\langselectkey}{cv}{c1}{chapterBtestaaal}
\DTLgetvalueforkey{\chapterBtestaaam}{c\langselectkey}{cv}{c1}{chapterBtestaaam}
\DTLgetvalueforkey{\chapterBtestaaan}{c\langselectkey}{cv}{c1}{chapterBtestaaan}
\DTLgetvalueforkey{\chapterBtestaaao}{c\langselectkey}{cv}{c1}{chapterBtestaaao}
\DTLgetvalueforkey{\chapterBtestaaap}{c\langselectkey}{cv}{c1}{chapterBtestaaap}
\DTLgetvalueforkey{\chapterBtestaaaq}{c\langselectkey}{cv}{c1}{chapterBtestaaaq}
\DTLgetvalueforkey{\chapterBtestaaar}{c\langselectkey}{cv}{c1}{chapterBtestaaar}
\DTLgetvalueforkey{\chapterBtestaaas}{c\langselectkey}{cv}{c1}{chapterBtestaaas}
\DTLgetvalueforkey{\chapterBtestaaat}{c\langselectkey}{cv}{c1}{chapterBtestaaat}
\DTLgetvalueforkey{\chapterBtestaaau}{c\langselectkey}{cv}{c1}{chapterBtestaaau}
\DTLgetvalueforkey{\chapterBtestaaav}{c\langselectkey}{cv}{c1}{chapterBtestaaav}
\DTLgetvalueforkey{\chapterBtestaaaw}{c\langselectkey}{cv}{c1}{chapterBtestaaaw}
\DTLgetvalueforkey{\chapterBtestaaax}{c\langselectkey}{cv}{c1}{chapterBtestaaax}
\DTLgetvalueforkey{\chapterBtestaaay}{c\langselectkey}{cv}{c1}{chapterBtestaaay}
\DTLgetvalueforkey{\chapterBtestaaaz}{c\langselectkey}{cv}{c1}{chapterBtestaaaz}
\DTLgetvalueforkey{\chapterBtestaaba}{c\langselectkey}{cv}{c1}{chapterBtestaaba}
\DTLgetvalueforkey{\chapterBtestaabb}{c\langselectkey}{cv}{c1}{chapterBtestaabb}
\DTLgetvalueforkey{\chapterBtestaabc}{c\langselectkey}{cv}{c1}{chapterBtestaabc}
\DTLgetvalueforkey{\chapterBtestaabd}{c\langselectkey}{cv}{c1}{chapterBtestaabd}
\DTLgetvalueforkey{\chapterBtestaabe}{c\langselectkey}{cv}{c1}{chapterBtestaabe}
\DTLgetvalueforkey{\chapterBtestaabf}{c\langselectkey}{cv}{c1}{chapterBtestaabf}
\DTLgetvalueforkey{\chapterBtestaabg}{c\langselectkey}{cv}{c1}{chapterBtestaabg}
\DTLgetvalueforkey{\chapterBtestaabh}{c\langselectkey}{cv}{c1}{chapterBtestaabh}
\DTLgetvalueforkey{\chapterBtestaabi}{c\langselectkey}{cv}{c1}{chapterBtestaabi}
\DTLgetvalueforkey{\chapterBtestaabj}{c\langselectkey}{cv}{c1}{chapterBtestaabj}
\DTLgetvalueforkey{\chapterBtestaabk}{c\langselectkey}{cv}{c1}{chapterBtestaabk}
\DTLgetvalueforkey{\chapterBtestaabl}{c\langselectkey}{cv}{c1}{chapterBtestaabl}
\DTLgetvalueforkey{\chapterBtestaabm}{c\langselectkey}{cv}{c1}{chapterBtestaabm}
\DTLgetvalueforkey{\chapterBtestaabn}{c\langselectkey}{cv}{c1}{chapterBtestaabn}
\DTLgetvalueforkey{\chapterBtestaabo}{c\langselectkey}{cv}{c1}{chapterBtestaabo}
\DTLgetvalueforkey{\chapterBtestaabp}{c\langselectkey}{cv}{c1}{chapterBtestaabp}
\DTLgetvalueforkey{\chapterBtestaabq}{c\langselectkey}{cv}{c1}{chapterBtestaabq}
\DTLgetvalueforkey{\chapterBtestaabr}{c\langselectkey}{cv}{c1}{chapterBtestaabr}
\DTLgetvalueforkey{\chapterBtestaabs}{c\langselectkey}{cv}{c1}{chapterBtestaabs}
\DTLgetvalueforkey{\chapterBtestaabt}{c\langselectkey}{cv}{c1}{chapterBtestaabt}
\DTLgetvalueforkey{\chapterBtestaabu}{c\langselectkey}{cv}{c1}{chapterBtestaabu}
\DTLgetvalueforkey{\chapterBtestaabv}{c\langselectkey}{cv}{c1}{chapterBtestaabv}
\DTLgetvalueforkey{\chapterBtestaabw}{c\langselectkey}{cv}{c1}{chapterBtestaabw}
\DTLgetvalueforkey{\chapterBtestaabx}{c\langselectkey}{cv}{c1}{chapterBtestaabx}
\DTLgetvalueforkey{\chapterBtestaaby}{c\langselectkey}{cv}{c1}{chapterBtestaaby}
\DTLgetvalueforkey{\chapterBtestaabz}{c\langselectkey}{cv}{c1}{chapterBtestaabz}
\DTLgetvalueforkey{\chapterBtestaaca}{c\langselectkey}{cv}{c1}{chapterBtestaaca}
\DTLgetvalueforkey{\chapterBtestaacb}{c\langselectkey}{cv}{c1}{chapterBtestaacb}
\DTLgetvalueforkey{\chapterBtestaacc}{c\langselectkey}{cv}{c1}{chapterBtestaacc}
\DTLgetvalueforkey{\chapterBtestaacd}{c\langselectkey}{cv}{c1}{chapterBtestaacd}
\DTLgetvalueforkey{\chapterBtestaace}{c\langselectkey}{cv}{c1}{chapterBtestaace}
\DTLgetvalueforkey{\chapterBtestaacf}{c\langselectkey}{cv}{c1}{chapterBtestaacf}
\DTLgetvalueforkey{\chapterBtestaacg}{c\langselectkey}{cv}{c1}{chapterBtestaacg}
\DTLgetvalueforkey{\chapterBtestaach}{c\langselectkey}{cv}{c1}{chapterBtestaach}
\DTLgetvalueforkey{\chapterBtestaaci}{c\langselectkey}{cv}{c1}{chapterBtestaaci}
\DTLgetvalueforkey{\chapterBtestaacj}{c\langselectkey}{cv}{c1}{chapterBtestaacj}
\DTLgetvalueforkey{\chapterBtestaack}{c\langselectkey}{cv}{c1}{chapterBtestaack}
\DTLgetvalueforkey{\chapterBtestaacl}{c\langselectkey}{cv}{c1}{chapterBtestaacl}
\DTLgetvalueforkey{\chapterBtestaacm}{c\langselectkey}{cv}{c1}{chapterBtestaacm}
\DTLgetvalueforkey{\chapterBtestaacn}{c\langselectkey}{cv}{c1}{chapterBtestaacn}
\DTLgetvalueforkey{\chapterBtestaaco}{c\langselectkey}{cv}{c1}{chapterBtestaaco}
\DTLgetvalueforkey{\chapterBtestaacp}{c\langselectkey}{cv}{c1}{chapterBtestaacp}
\DTLgetvalueforkey{\chapterBtestaacq}{c\langselectkey}{cv}{c1}{chapterBtestaacq}
\DTLgetvalueforkey{\chapterBtestaacr}{c\langselectkey}{cv}{c1}{chapterBtestaacr}
\DTLgetvalueforkey{\chapterBtestaacs}{c\langselectkey}{cv}{c1}{chapterBtestaacs}
\DTLgetvalueforkey{\chapterBtestaact}{c\langselectkey}{cv}{c1}{chapterBtestaact}
\DTLgetvalueforkey{\chapterBtestaacu}{c\langselectkey}{cv}{c1}{chapterBtestaacu}
\DTLgetvalueforkey{\chapterBtestaacv}{c\langselectkey}{cv}{c1}{chapterBtestaacv}
\DTLgetvalueforkey{\chapterBtestaacw}{c\langselectkey}{cv}{c1}{chapterBtestaacw}
\DTLgetvalueforkey{\chapterBtestaacx}{c\langselectkey}{cv}{c1}{chapterBtestaacx}
\DTLgetvalueforkey{\chapterBtestaacy}{c\langselectkey}{cv}{c1}{chapterBtestaacy}
\DTLgetvalueforkey{\chapterBtestaacz}{c\langselectkey}{cv}{c1}{chapterBtestaacz}
\DTLgetvalueforkey{\chapterBtestaada}{c\langselectkey}{cv}{c1}{chapterBtestaada}
\DTLgetvalueforkey{\chapterBtestaadb}{c\langselectkey}{cv}{c1}{chapterBtestaadb}
\DTLgetvalueforkey{\chapterBtestaadc}{c\langselectkey}{cv}{c1}{chapterBtestaadc}
\DTLgetvalueforkey{\chapterBtestaadd}{c\langselectkey}{cv}{c1}{chapterBtestaadd}
\DTLgetvalueforkey{\chapterBtestaade}{c\langselectkey}{cv}{c1}{chapterBtestaade}
\DTLgetvalueforkey{\chapterBtestaadf}{c\langselectkey}{cv}{c1}{chapterBtestaadf}
\DTLgetvalueforkey{\chapterBtestaadg}{c\langselectkey}{cv}{c1}{chapterBtestaadg}
\DTLgetvalueforkey{\chapterBtestaadh}{c\langselectkey}{cv}{c1}{chapterBtestaadh}
\DTLgetvalueforkey{\chapterBtestaadi}{c\langselectkey}{cv}{c1}{chapterBtestaadi}
\DTLgetvalueforkey{\chapterBtestaadj}{c\langselectkey}{cv}{c1}{chapterBtestaadj}
\DTLgetvalueforkey{\chapterBtestaadk}{c\langselectkey}{cv}{c1}{chapterBtestaadk}
\DTLgetvalueforkey{\chapterBtestaadl}{c\langselectkey}{cv}{c1}{chapterBtestaadl}
\DTLgetvalueforkey{\chapterBtestaadm}{c\langselectkey}{cv}{c1}{chapterBtestaadm}
\DTLgetvalueforkey{\chapterBtestaadn}{c\langselectkey}{cv}{c1}{chapterBtestaadn}
\DTLgetvalueforkey{\chapterBtestaado}{c\langselectkey}{cv}{c1}{chapterBtestaado}
\DTLgetvalueforkey{\chapterBtestaadp}{c\langselectkey}{cv}{c1}{chapterBtestaadp}
\DTLgetvalueforkey{\chapterBtestaadq}{c\langselectkey}{cv}{c1}{chapterBtestaadq}
\DTLgetvalueforkey{\chapterBtestaadr}{c\langselectkey}{cv}{c1}{chapterBtestaadr}
\DTLgetvalueforkey{\chapterBtestaads}{c\langselectkey}{cv}{c1}{chapterBtestaads}
\DTLgetvalueforkey{\chapterBtestaadt}{c\langselectkey}{cv}{c1}{chapterBtestaadt}
\DTLgetvalueforkey{\chapterBtestaadu}{c\langselectkey}{cv}{c1}{chapterBtestaadu}
\DTLgetvalueforkey{\chapterBtestaadv}{c\langselectkey}{cv}{c1}{chapterBtestaadv}
\DTLgetvalueforkey{\chapterBtestaadw}{c\langselectkey}{cv}{c1}{chapterBtestaadw}
\DTLgetvalueforkey{\chapterBtestaadx}{c\langselectkey}{cv}{c1}{chapterBtestaadx}
\DTLgetvalueforkey{\chapterBtestaady}{c\langselectkey}{cv}{c1}{chapterBtestaady}
\DTLgetvalueforkey{\chapterBtestaadz}{c\langselectkey}{cv}{c1}{chapterBtestaadz}
\DTLgetvalueforkey{\chapterBtestaaea}{c\langselectkey}{cv}{c1}{chapterBtestaaea}
\DTLgetvalueforkey{\chapterBtestaaeb}{c\langselectkey}{cv}{c1}{chapterBtestaaeb}
\DTLgetvalueforkey{\chapterBtestaaec}{c\langselectkey}{cv}{c1}{chapterBtestaaec}
\DTLgetvalueforkey{\chapterBtestaaed}{c\langselectkey}{cv}{c1}{chapterBtestaaed}
\DTLgetvalueforkey{\chapterBtestaaee}{c\langselectkey}{cv}{c1}{chapterBtestaaee}
\typeout{Loading C}
\DTLgetvalueforkey{\chapterCtestaaaa}{c\langselectkey}{cv}{c1}{chapterCtestaaaa}
\DTLgetvalueforkey{\chapterCtestaaab}{c\langselectkey}{cv}{c1}{chapterCtestaaab}
\DTLgetvalueforkey{\chapterCtestaaac}{c\langselectkey}{cv}{c1}{chapterCtestaaac}
\DTLgetvalueforkey{\chapterCtestaaad}{c\langselectkey}{cv}{c1}{chapterCtestaaad}
\DTLgetvalueforkey{\chapterCtestaaae}{c\langselectkey}{cv}{c1}{chapterCtestaaae}
\DTLgetvalueforkey{\chapterCtestaaaf}{c\langselectkey}{cv}{c1}{chapterCtestaaaf}
\DTLgetvalueforkey{\chapterCtestaaag}{c\langselectkey}{cv}{c1}{chapterCtestaaag}
\DTLgetvalueforkey{\chapterCtestaaah}{c\langselectkey}{cv}{c1}{chapterCtestaaah}
\DTLgetvalueforkey{\chapterCtestaaai}{c\langselectkey}{cv}{c1}{chapterCtestaaai}
\DTLgetvalueforkey{\chapterCtestaaaj}{c\langselectkey}{cv}{c1}{chapterCtestaaaj}
\DTLgetvalueforkey{\chapterCtestaaak}{c\langselectkey}{cv}{c1}{chapterCtestaaak}
\DTLgetvalueforkey{\chapterCtestaaal}{c\langselectkey}{cv}{c1}{chapterCtestaaal}
\DTLgetvalueforkey{\chapterCtestaaam}{c\langselectkey}{cv}{c1}{chapterCtestaaam}
\DTLgetvalueforkey{\chapterCtestaaan}{c\langselectkey}{cv}{c1}{chapterCtestaaan}
\DTLgetvalueforkey{\chapterCtestaaao}{c\langselectkey}{cv}{c1}{chapterCtestaaao}
\DTLgetvalueforkey{\chapterCtestaaap}{c\langselectkey}{cv}{c1}{chapterCtestaaap}
\DTLgetvalueforkey{\chapterCtestaaaq}{c\langselectkey}{cv}{c1}{chapterCtestaaaq}
\DTLgetvalueforkey{\chapterCtestaaar}{c\langselectkey}{cv}{c1}{chapterCtestaaar}
\DTLgetvalueforkey{\chapterCtestaaas}{c\langselectkey}{cv}{c1}{chapterCtestaaas}
\DTLgetvalueforkey{\chapterCtestaaat}{c\langselectkey}{cv}{c1}{chapterCtestaaat}
\DTLgetvalueforkey{\chapterCtestaaau}{c\langselectkey}{cv}{c1}{chapterCtestaaau}
\DTLgetvalueforkey{\chapterCtestaaav}{c\langselectkey}{cv}{c1}{chapterCtestaaav}
\DTLgetvalueforkey{\chapterCtestaaaw}{c\langselectkey}{cv}{c1}{chapterCtestaaaw}
\DTLgetvalueforkey{\chapterCtestaaax}{c\langselectkey}{cv}{c1}{chapterCtestaaax}
\DTLgetvalueforkey{\chapterCtestaaay}{c\langselectkey}{cv}{c1}{chapterCtestaaay}
\DTLgetvalueforkey{\chapterCtestaaaz}{c\langselectkey}{cv}{c1}{chapterCtestaaaz}
\DTLgetvalueforkey{\chapterCtestaaba}{c\langselectkey}{cv}{c1}{chapterCtestaaba}
\DTLgetvalueforkey{\chapterCtestaabb}{c\langselectkey}{cv}{c1}{chapterCtestaabb}
\DTLgetvalueforkey{\chapterCtestaabc}{c\langselectkey}{cv}{c1}{chapterCtestaabc}
\DTLgetvalueforkey{\chapterCtestaabd}{c\langselectkey}{cv}{c1}{chapterCtestaabd}
\DTLgetvalueforkey{\chapterCtestaabe}{c\langselectkey}{cv}{c1}{chapterCtestaabe}
\DTLgetvalueforkey{\chapterCtestaabf}{c\langselectkey}{cv}{c1}{chapterCtestaabf}
\DTLgetvalueforkey{\chapterCtestaabg}{c\langselectkey}{cv}{c1}{chapterCtestaabg}
\DTLgetvalueforkey{\chapterCtestaabh}{c\langselectkey}{cv}{c1}{chapterCtestaabh}
\DTLgetvalueforkey{\chapterCtestaabi}{c\langselectkey}{cv}{c1}{chapterCtestaabi}
\DTLgetvalueforkey{\chapterCtestaabj}{c\langselectkey}{cv}{c1}{chapterCtestaabj}
\DTLgetvalueforkey{\chapterCtestaabk}{c\langselectkey}{cv}{c1}{chapterCtestaabk}
\DTLgetvalueforkey{\chapterCtestaabl}{c\langselectkey}{cv}{c1}{chapterCtestaabl}
\DTLgetvalueforkey{\chapterCtestaabm}{c\langselectkey}{cv}{c1}{chapterCtestaabm}
\DTLgetvalueforkey{\chapterCtestaabn}{c\langselectkey}{cv}{c1}{chapterCtestaabn}
\DTLgetvalueforkey{\chapterCtestaabo}{c\langselectkey}{cv}{c1}{chapterCtestaabo}
\DTLgetvalueforkey{\chapterCtestaabp}{c\langselectkey}{cv}{c1}{chapterCtestaabp}
\DTLgetvalueforkey{\chapterCtestaabq}{c\langselectkey}{cv}{c1}{chapterCtestaabq}
\DTLgetvalueforkey{\chapterCtestaabr}{c\langselectkey}{cv}{c1}{chapterCtestaabr}
\DTLgetvalueforkey{\chapterCtestaabs}{c\langselectkey}{cv}{c1}{chapterCtestaabs}
\DTLgetvalueforkey{\chapterCtestaabt}{c\langselectkey}{cv}{c1}{chapterCtestaabt}
\DTLgetvalueforkey{\chapterCtestaabu}{c\langselectkey}{cv}{c1}{chapterCtestaabu}
\DTLgetvalueforkey{\chapterCtestaabv}{c\langselectkey}{cv}{c1}{chapterCtestaabv}
\DTLgetvalueforkey{\chapterCtestaabw}{c\langselectkey}{cv}{c1}{chapterCtestaabw}
\DTLgetvalueforkey{\chapterCtestaabx}{c\langselectkey}{cv}{c1}{chapterCtestaabx}
\DTLgetvalueforkey{\chapterCtestaaby}{c\langselectkey}{cv}{c1}{chapterCtestaaby}
\DTLgetvalueforkey{\chapterCtestaabz}{c\langselectkey}{cv}{c1}{chapterCtestaabz}
\DTLgetvalueforkey{\chapterCtestaaca}{c\langselectkey}{cv}{c1}{chapterCtestaaca}
\DTLgetvalueforkey{\chapterCtestaacb}{c\langselectkey}{cv}{c1}{chapterCtestaacb}
\DTLgetvalueforkey{\chapterCtestaacb}{c\langselectkey}{cv}{c1}{chapterCtestaacc}
\typeout{Loading D}
\DTLgetvalueforkey{\chapterDtestaaaa}{c\langselectkey}{cv}{c1}{chapterDtestaaaa}
\DTLgetvalueforkey{\chapterDtestaaab}{c\langselectkey}{cv}{c1}{chapterDtestaaab}
\DTLgetvalueforkey{\chapterDtestaaac}{c\langselectkey}{cv}{c1}{chapterDtestaaac}
\DTLgetvalueforkey{\chapterDtestaaad}{c\langselectkey}{cv}{c1}{chapterDtestaaad}
\DTLgetvalueforkey{\chapterDtestaaae}{c\langselectkey}{cv}{c1}{chapterDtestaaae}
\DTLgetvalueforkey{\chapterDtestaaaf}{c\langselectkey}{cv}{c1}{chapterDtestaaaf}
\DTLgetvalueforkey{\chapterDtestaaag}{c\langselectkey}{cv}{c1}{chapterDtestaaag}
\DTLgetvalueforkey{\chapterDtestaaah}{c\langselectkey}{cv}{c1}{chapterDtestaaah}
\DTLgetvalueforkey{\chapterDtestaaai}{c\langselectkey}{cv}{c1}{chapterDtestaaai}
\DTLgetvalueforkey{\chapterDtestaaaj}{c\langselectkey}{cv}{c1}{chapterDtestaaaj}
\DTLgetvalueforkey{\chapterDtestaaak}{c\langselectkey}{cv}{c1}{chapterDtestaaak}
\DTLgetvalueforkey{\chapterDtestaaal}{c\langselectkey}{cv}{c1}{chapterDtestaaal}
\DTLgetvalueforkey{\chapterDtestaaam}{c\langselectkey}{cv}{c1}{chapterDtestaaam}
\DTLgetvalueforkey{\chapterDtestaaan}{c\langselectkey}{cv}{c1}{chapterDtestaaan}
\DTLgetvalueforkey{\chapterDtestaaao}{c\langselectkey}{cv}{c1}{chapterDtestaaao}
\DTLgetvalueforkey{\chapterDtestaaap}{c\langselectkey}{cv}{c1}{chapterDtestaaap}
\DTLgetvalueforkey{\chapterDtestaaaq}{c\langselectkey}{cv}{c1}{chapterDtestaaaq}
\DTLgetvalueforkey{\chapterDtestaaar}{c\langselectkey}{cv}{c1}{chapterDtestaaar}
\DTLgetvalueforkey{\chapterDtestaaas}{c\langselectkey}{cv}{c1}{chapterDtestaaas}
\DTLgetvalueforkey{\chapterDtestaaat}{c\langselectkey}{cv}{c1}{chapterDtestaaat}
\DTLgetvalueforkey{\chapterDtestaaau}{c\langselectkey}{cv}{c1}{chapterDtestaaau}
\DTLgetvalueforkey{\chapterDtestaaav}{c\langselectkey}{cv}{c1}{chapterDtestaaav}
\DTLgetvalueforkey{\chapterDtestaaaw}{c\langselectkey}{cv}{c1}{chapterDtestaaaw}
\DTLgetvalueforkey{\chapterDtestaaax}{c\langselectkey}{cv}{c1}{chapterDtestaaax}
\DTLgetvalueforkey{\chapterDtestaaay}{c\langselectkey}{cv}{c1}{chapterDtestaaay}
\DTLgetvalueforkey{\chapterDtestaaaz}{c\langselectkey}{cv}{c1}{chapterDtestaaaz}
\DTLgetvalueforkey{\chapterDtestaaba}{c\langselectkey}{cv}{c1}{chapterDtestaaba}
\DTLgetvalueforkey{\chapterDtestaabb}{c\langselectkey}{cv}{c1}{chapterDtestaabb}
\DTLgetvalueforkey{\chapterDtestaabc}{c\langselectkey}{cv}{c1}{chapterDtestaabc}
\DTLgetvalueforkey{\chapterDtestaabd}{c\langselectkey}{cv}{c1}{chapterDtestaabd}
\DTLgetvalueforkey{\chapterDtestaabe}{c\langselectkey}{cv}{c1}{chapterDtestaabe}
\DTLgetvalueforkey{\chapterDtestaabf}{c\langselectkey}{cv}{c1}{chapterDtestaabf}
\DTLgetvalueforkey{\chapterDtestaabg}{c\langselectkey}{cv}{c1}{chapterDtestaabg}
\DTLgetvalueforkey{\chapterDtestaabh}{c\langselectkey}{cv}{c1}{chapterDtestaabh}
\DTLgetvalueforkey{\chapterDtestaabi}{c\langselectkey}{cv}{c1}{chapterDtestaabi}
\DTLgetvalueforkey{\chapterDtestaabj}{c\langselectkey}{cv}{c1}{chapterDtestaabj}
\DTLgetvalueforkey{\chapterDtestaabk}{c\langselectkey}{cv}{c1}{chapterDtestaabk}
\DTLgetvalueforkey{\chapterDtestaabl}{c\langselectkey}{cv}{c1}{chapterDtestaabl}
\DTLgetvalueforkey{\chapterDtestaabm}{c\langselectkey}{cv}{c1}{chapterDtestaabm}
\DTLgetvalueforkey{\chapterDtestaabn}{c\langselectkey}{cv}{c1}{chapterDtestaabn}
\DTLgetvalueforkey{\chapterDtestaabo}{c\langselectkey}{cv}{c1}{chapterDtestaabo}
\DTLgetvalueforkey{\chapterDtestaabp}{c\langselectkey}{cv}{c1}{chapterDtestaabp}
\DTLgetvalueforkey{\chapterDtestaabq}{c\langselectkey}{cv}{c1}{chapterDtestaabq}
\DTLgetvalueforkey{\chapterDtestaabr}{c\langselectkey}{cv}{c1}{chapterDtestaabr}
\DTLgetvalueforkey{\chapterDtestaabs}{c\langselectkey}{cv}{c1}{chapterDtestaabs}
\DTLgetvalueforkey{\chapterDtestaabt}{c\langselectkey}{cv}{c1}{chapterDtestaabt}
\DTLgetvalueforkey{\chapterDtestaabu}{c\langselectkey}{cv}{c1}{chapterDtestaabu}
\DTLgetvalueforkey{\chapterDtestaabv}{c\langselectkey}{cv}{c1}{chapterDtestaabv}
\DTLgetvalueforkey{\chapterDtestaabw}{c\langselectkey}{cv}{c1}{chapterDtestaabw}
\DTLgetvalueforkey{\chapterDtestaabx}{c\langselectkey}{cv}{c1}{chapterDtestaabx}
\DTLgetvalueforkey{\chapterDtestaaby}{c\langselectkey}{cv}{c1}{chapterDtestaaby}
\DTLgetvalueforkey{\chapterDtestaabz}{c\langselectkey}{cv}{c1}{chapterDtestaabz}
\DTLgetvalueforkey{\chapterDtestaaca}{c\langselectkey}{cv}{c1}{chapterDtestaaca}
\DTLgetvalueforkey{\chapterDtestaacb}{c\langselectkey}{cv}{c1}{chapterDtestaacb}
\DTLgetvalueforkey{\chapterDtestaacc}{c\langselectkey}{cv}{c1}{chapterDtestaacc}
\DTLgetvalueforkey{\chapterDtestaacd}{c\langselectkey}{cv}{c1}{chapterDtestaacd}
\DTLgetvalueforkey{\chapterDtestaace}{c\langselectkey}{cv}{c1}{chapterDtestaace}
\DTLgetvalueforkey{\chapterDtestaacf}{c\langselectkey}{cv}{c1}{chapterDtestaacf}
\DTLgetvalueforkey{\chapterDtestaacg}{c\langselectkey}{cv}{c1}{chapterDtestaacg}
\DTLgetvalueforkey{\chapterDtestaach}{c\langselectkey}{cv}{c1}{chapterDtestaach}
\DTLgetvalueforkey{\chapterDtestaaci}{c\langselectkey}{cv}{c1}{chapterDtestaaci}
\DTLgetvalueforkey{\chapterDtestaacj}{c\langselectkey}{cv}{c1}{chapterDtestaacj}
\DTLgetvalueforkey{\chapterDtestaack}{c\langselectkey}{cv}{c1}{chapterDtestaack}
\DTLgetvalueforkey{\chapterDtestaacl}{c\langselectkey}{cv}{c1}{chapterDtestaacl}
\DTLgetvalueforkey{\chapterDtestaacm}{c\langselectkey}{cv}{c1}{chapterDtestaacm}
\DTLgetvalueforkey{\chapterDtestaacn}{c\langselectkey}{cv}{c1}{chapterDtestaacn}
\DTLgetvalueforkey{\chapterDtestaaco}{c\langselectkey}{cv}{c1}{chapterDtestaaco}
\DTLgetvalueforkey{\chapterDtestaacp}{c\langselectkey}{cv}{c1}{chapterDtestaacp}
\DTLgetvalueforkey{\chapterDtestaacq}{c\langselectkey}{cv}{c1}{chapterDtestaacq}
\DTLgetvalueforkey{\chapterDtestaacr}{c\langselectkey}{cv}{c1}{chapterDtestaacr}
\DTLgetvalueforkey{\chapterDtestaacs}{c\langselectkey}{cv}{c1}{chapterDtestaacs}
\DTLgetvalueforkey{\chapterDtestaact}{c\langselectkey}{cv}{c1}{chapterDtestaact}
\DTLgetvalueforkey{\chapterDtestaacu}{c\langselectkey}{cv}{c1}{chapterDtestaacu}
\DTLgetvalueforkey{\chapterDtestaacv}{c\langselectkey}{cv}{c1}{chapterDtestaacv}
\DTLgetvalueforkey{\chapterDtestaacw}{c\langselectkey}{cv}{c1}{chapterDtestaacw}
\DTLgetvalueforkey{\chapterDtestaacx}{c\langselectkey}{cv}{c1}{chapterDtestaacx}
\DTLgetvalueforkey{\chapterDtestaacy}{c\langselectkey}{cv}{c1}{chapterDtestaacy}
\DTLgetvalueforkey{\chapterDtestaacz}{c\langselectkey}{cv}{c1}{chapterDtestaacz}
\DTLdeletedb{cv}
\end{filecontents}
\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Langaugecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterAtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterBtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterCtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaav;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaax;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaay;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaaz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaaba;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabe;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterCtestaabf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaab;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaac;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaad;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaae;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaag;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaah;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaai;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaak;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaal;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaam;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaan;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaao;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaap;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaar;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaas;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaat;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaau;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaav;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaax;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaay;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaaz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaba;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabe;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterDtestaabf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabg;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabh;;;3;10;;;GER;EN;;;;;;;;;;;;;;;; 
chapterDtestaabi;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabk;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabl;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabm;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabn;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabo;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacd;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaace;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabp;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabr;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabs;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabt;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabu;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabv;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabx;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaby;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaabz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaca;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacb;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacc;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacf;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacg;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaach;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaci;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacj;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaack;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacl;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacm;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacn;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaaco;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacp;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacq;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacr;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacs;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaact;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacu;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacv;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacw;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacx;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacy;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
chapterDtestaacz;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

% Comment the following lines (just before test) and uncomment hyperref and filesize will be small. 
% Comment hyperref and uncomment all the following lines and the filesize will be small.
% Uncomment hyperref and all the following lines and the filesize will be big.

    \providecommand{\hspce}{\,}
    \FPupn{langselect}{1}
    \DTLsetseparator{;}
    \FPupn{langselectkey}{0}
    \input{dbload}

test

\end{document}
  • 3
    You comment that there is no MWE, but it makes the question very hard to understand. Clearly the exact form of the input commands have no bearing on the output filesize. What matters is what document is generated. Without any example it is impossible to guess, but either the documents have different text or different fonts or different images in the generated pdf. – David Carlisle Feb 14 '15 at 10:53
  • @DavidCarlisle ok. I will try to suply a MWE in the next few days. I thought, that it is not necessary because of technical issues. "what document is generated" I do not understand the meaning of this sentence. Because its a generale template, many packages are included and the only difference is the way of the contents comes to the template. Therefor I have to suply a MWE or a anonymized version of both version with all used packages? Give me a hint what is the right way... Thanks – Peter Ebelsberger Feb 14 '15 at 11:13
  • An example is needed because your description of what is happening can not be what is happening. If it is just a matter of the same document being constructed by differently arranged source files, the output documents would have the same size. If 1 pdf is 50 times bigger than the other that is clearly not the case. The difference will not relate to whether you use a csv or tex file as input. The pdf files must have different content. Perhaps one has fonts embedded one not for example. – David Carlisle Feb 14 '15 at 11:18
  • 1
    ocgtools! well there you go, the whole point of that is to have multiple "layers" in the pdf such as high and low resolution images or any other thing but basically the more layers you have the bigger the pdf is, but it's nothing to do with csv input or datatool – David Carlisle Feb 14 '15 at 22:01
  • 2
    Isn't that a question rather than an answer? – David Carlisle Feb 14 '15 at 23:02
4
+100

Some of the high-level user commands provided by datatool aren't as efficient as the lower-level user commands and \DTLgetvalueforkey is one of those cases as it internally uses \DTLforeach* to find the required value in the database. This isn't much of a problem for occasional use with small databases, but for repeated use and for larger databases, it's better to use the more advanced commands.

There are two main problems with the repeated use of \DTLforeach in this type of context. The first is the extra time it takes to build the document, and the second is the repeated use of \refstepcounter. I suspect it's the second of these two that's causing the file size to increase as hyperref inserts PDF anchors. This mechanism is provided by \DTLforeach to allow for cross-referencing rows when iterating over the database (for example, displaying the contents of the database as a table).

Consider this cut-down version of your MWE:

\documentclass{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Languagecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

\begin{document}
\providecommand{\hspce}{\,}
\FPupn{langselect}{1}
\DTLsetseparator{;}
\FPupn{langselectkey}{0}

\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}
\DTLgetvalueforkey{\Languagecode}{c\langselectkey}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c\langselectkey}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

This results in \refstepcounter being used five times. Scale this up and that's a lot of unnecessary PDF anchors padding out the document.

Here's an alternative that uses the lower-level commands that don't perform any iteration (see section 5.11.1 of the datatool user manual):

\documentclass{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID;CATA;CATB;MIN;MAX;ADDA;ADDB;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18
Languagecode;SYSTEM;;2;3;;;DE;EN;;;;;;;;;;;;;;;;
chapterAtestaaaa;;;3;10;;;GER;EN;;;;;;;;;;;;;;;;
\end{filecontents*}

\begin{document}
\providecommand{\hspce}{\,}
\FPupn{langselect}{1}
\DTLsetseparator{;}
\FPupn{langselectkey}{0}

\DTLloadrawdb[keys={c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25}]{cv}{./cvtestdatabase.csv}
\FPupn{langselectkey}{langselect 7 + 0 round}

% Get the column index for the column labelled ``c1''
\DTLgetcolumnindex{\columnidx}{cv}{c1}%
% Get the row where that column matches the given text:
\DTLgetrowindex{\rowidx}{cv}{\columnidx}{Languagecode}%
% Set it as the current row
\dtlgetrow{cv}{\rowidx}%
% Get the index for the required column
\DTLgetcolumnindex{\columnidx}{cv}{c\langselectkey}%
\dtlgetentryfromcurrentrow{\LanguageCode}{\columnidx}

Result: \LanguageCode.

\end{document}

You can wrap up those lines in a command to make things simpler. For example:

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c\langselectkey}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

Then you can just use it like this:

\fetchinfo{\LanguageCode}{Languagecode}

The second of the two test documents in this example (the one using the low-level commands) is 867 bytes smaller than the first (the one using \DTLgetvalueforkey).

Edit:

I realise I had an extra lookup in the first example that I didn't have in the second, so it's not a good comparison. Here are a new set of tests that produce the same text. The example has been trimmed down for clarity.

Test 1

hyperref and \DTLgetvalueforkey:

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

The file size of the resulting PDF (test.pdf):

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14178 Nov 18 09:58 test.pdf

Test 2:

No hyperref and \DTLgetvalueforkey. This is the same as above but with one line commented out:

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
%\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

File size:

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:05 test.pdf

Test 3:

As Test 1 but the lookup code has been moved to the preamble:

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}
\DTLgetvalueforkey{\Languagecode}{c2}{cv}{c1}{Languagecode}
\DTLgetvalueforkey{\chapterAtestaaaa}{c2}{cv}{c1}{chapterAtestaaaa}

\begin{document}

Languagecode: \Languagecode.
test command: \chapterAtestaaaa.
\end{document}

File size:

ls -l test.pdf
-rw-rw-r--. 1 nlct nlct 14175 Nov 18 10:07 test.pdf

Test 4:

hyperref and low-level user commands.

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\begin{document}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c2}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

\fetchinfo{\LanguageCode}{Languagecode}
\fetchinfo{\chapterAtestaaaa}{chapterAtestaaaa}

Languagecode: \LanguageCode.
test command: \chapterAtestaaaa.

\end{document}

File size:

ls -l test2.pdf 
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:12 test2.pdf

Test 5:

No hyperref and low-level user commands. This is the same as the above but with the \usepackage{hyperref} line commented out.

File size:

ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 13865 Nov 18 10:13 test2.pdf

Test 6:

hyperref and low-level commands with lookup performed in preamble. This is the same as Test 4 but the \begin{document} line has moved further down.

\documentclass{scrreprt}

\usepackage{datatool}
\usepackage{filecontents}
\usepackage{hyperref}

\begin{filecontents*}{cvtestdatabase.csv}
LANGID,1
Languagecode,DE
chapterAtestaaaa,GER
\end{filecontents*}

\DTLloadrawdb[keys={c1,c2}]{cv}{./cvtestdatabase.csv}

\newcommand{\fetchinfo}[2]{%
   % Get the column index for the column labelled ``c1''
   \DTLgetcolumnindex{\columnidx}{cv}{c1}%
   % Get the row where that column matches the given text:
   \DTLgetrowindex{\rowidx}{cv}{\columnidx}{#2}%
   % Set it as the current row
   \dtlgetrow{cv}{\rowidx}%
   % Get the index for the required column
   \DTLgetcolumnindex{\columnidx}{cv}{c2}%
   \dtlgetentryfromcurrentrow{#1}{\columnidx}%
}

\fetchinfo{\LanguageCode}{Languagecode}
\fetchinfo{\chapterAtestaaaa}{chapterAtestaaaa}

\begin{document}

Languagecode: \LanguageCode.
test command: \chapterAtestaaaa.

\end{document}

File size:

ls -l test2.pdf
-rw-rw-r--. 1 nlct nlct 14084 Nov 18 10:16 test2.pdf

Summary:

  • Test 1: 14178 (hyperref, high-level, lookup in document)
  • Test 2: 13865 (no hyperref, high-level, lookup in document)
  • Test 3: 14175 (hyperref, high-level, lookup in preamble)
  • Test 4: 14084 (hyperref, low-level, lookup in document)
  • Test 5: 13865 (no hyperref, low-level, lookup in document)
  • Test 6: 14084 (hyperref, low-level, lookup in preamble)

There's no difference in file size with Test 4 and Test 6, but there's a slight difference in file size with Test 1 and Test 3. I'm assuming that hyperref doesn't create anchors for \refstepcounter if it occurs in the preamble (which makes sense), so this would account for the different file sizes in Test 1 and Test 3.

The difference in the file size with Test 2 and Test 3 (and with Test 5 and Test 6 or 4) is due to the extra PDF-related information that hyperref adds.

The difference in file size with Test 3 and Test 6 is more interesting, but I don't know the reason for it, so there's obviously something other than the \refstepcounter in the high-level command that's contributed to the extra size.

Edit 2:

Further tests to investigate the file size increase with \refstepcounter:

\refstepcounter in document environment:

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\begin{document}
\loop \refstepcounter{test} \ifnum\value{test}<10\repeat

\thetest.
\end{document}

File size: 10733 bytes.

\refstepcounter in preamble:

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\loop \refstepcounter{test} \ifnum\value{test}<10\repeat

\begin{document}
\thetest.
\end{document}

File size: 10732 bytes.

\refstepcounter replaced with \stepcounter:

\documentclass{article}

\usepackage{hyperref}

\newcounter{test}

\loop \stepcounter{test} \ifnum\value{test}<10\repeat

\begin{document}
\thetest.
\end{document}

File size: 10581 bytes.

So it seems that even if \refstepcounter is used in the preamble it's still adding to the PDF size (compared with \stepcounter), although not as much as when it's used in the document.

  • is there still a difference to pure text in document? currently the filesize descreases to aproximately to a factor of 0.5 Is this still normal? – Peter Ebelsberger Nov 17 '15 at 20:30
  • @PeterEbelsberger I've edited my answer. Part of the change in file size is due to \refstepcounter but there's something else going on that I can't work out. – Nicola Talbot Nov 18 '15 at 10:36
  • For those curious: the size of this answer (in markdown) is 11699 bytes. – T. Verron Nov 18 '15 at 16:20
  • @NicolaTalbot thank you very much for your work. – Peter Ebelsberger Nov 21 '15 at 21:32
6

If you add

 \pdfcompresslevel=0

To the top of the document then you get filesizes of 3129555 and 13642 with and without hyperref. Looking in the pdf the first obvious difference is 26368 occurrences of the identical line

/D [3 0 R /XYZ 88.291 795.961 null]

which as far as I know is setting a named destination at those coordinates. That on its own accounts for 1000000 of the difference in the uncompressed version.

too late to look further but that may give you a place to look (or Heiko might pass by and explain what's happening:-)

  • adding \pdfcompresslevel=9 \pdfobjcompresslevel=3 makes the file smaller but still more than normal text. – Peter Ebelsberger Feb 18 '15 at 10:50
  • @PeterEbelsberger yes the reason for mentioning the \pdfcompress settings was to turn off settings so that it is easier to look at the structures inside the pdf. the defaults already compress pretty aggressively – David Carlisle Feb 18 '15 at 19:06

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.