A řešením je pro mne samozřejmě LaTeX, resp. jeho varianta pdfcslatex určená přímo pro naši mateřštinu a sazbu do PDF.
LaTeX jsem občas již používal, ale až nyní pro sazbu tak velkého textu (momentálně je pracovní verze na 250 stranách, ale něco se bude vypouštět). V mém případě bylo další významné plus, že texty jsem měl ve formátu podobném Wiki, takže jsem napsal konvertor do LaTeXu. Navíc pro mne bylo významné, že na začátku jen jednou nastavuji styl a pak jen vložím zdrojový kód a o zbytek se postará LaTeX.
O LaTexu je známo, jak vysoká je kvalita výsledné sazby (alias PDF). Na ukázku lze porovnat výstup z Wordu 2007 - klasický problém sazby jsou slitky

a LaTeX, kde slitek je automaticky generován místo např. kombinace fi, tak jak to má být:

Je perfektní, jak hodně věcí za něj LaTeX řeší, např. třeba automatické rozdělování textu tak, aby plynutí textu bylo oku příjemné.
Proto jsem byl zvědav, zda někdo udělal podporu pro sázení výpisů a nebyl jsem zklamán. Ve skutečnosti bych si na něco takového třeba ve Wordu ani netroufl, ale v LaTeXu je to tak primitivní, že to zvládne i cvičená opička. Je to za pomocí balíčku listing, který je součástí distribuce pro Windows http://miktex.org/miktex - mimochodem celkem příjemný kus SW, např. při chybějícím balíčku si ho sám stáhne a nainstaluje.

Zdrojový kód, na začátku deklarace a definice stylů a pak už se jde na to (od \begin{document}).
\batchmode
\documentclass[a4paper,12pt]{article}
\usepackage[cp1250]{inputenc}
\usepackage{czech}
\usepackage{courier}
\usepackage{color}
\usepackage{listings}
\usepackage{thumbpdf}
\usepackage{graphicx}
\usepackage[bookmarksopen,colorlinks,plainpages=false,urlcolor=blue]{hyperref}
\usepackage{url}
\definecolor{mygreen}{RGB}{0,100,0}
\lstset{tabsize=3,frame=lines,keywordstyle=\textbf,commentstyle=\color{mygreen}\textit,stringstyle=
\color{red},numbers=left,numberstyle=\tiny,numbersep=5pt,breaklines=true,
showstringspaces=false,basicstyle=\footnotesize,emph={label}}
\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
\begin{document}
Náš \texttt{záznam pro zamykání dat} jen tak na ukázku.
\begin{lstlisting}[language=Delphi,caption=Ukázka záznamu]
PPMonitorEx = ^PMonitorEx;
PMonitorEx = ^TMonitorEx;
TMonitorEx = record
strict private
type
PWaitingThread = ^TWaitingThread;
TWaitingThread = record
Next: PWaitingThread;
Thread: Cardinal;
WaitEvent: Pointer;
end;
public
// komentář
class procedure Enter(AObject: TObject;
const sDef:string = 'Lock'); overload; static; inline;
class function Enter(AObject: TObject; Timeout: Cardinal): Boolean; overload; static;
class procedure Exit(AObject: TObject); overload; static;
end;
\end{lstlisting}
\end{document}