Because the hyperref package interacts with many other packages in a subtle and and often unpredictable way it is a constant source of confusion. In order to minimize these problems it is strongly recommended to use a reasonable new version of hyperref.sty. The other important point is to include hyperref.sty ``at the right time''. For the ProgDoc tutorial, which is processed by LATEX, pdfLATEX and html the following order of inclusion led to acceptable results:
\usepackage{fancyhdr} \usepackage{hyperref} \usepackage{html} \usepackage{progdoc} \usepackage{listings}
If you use any other sensitive packages you may figure out the right position for the inclusion of your package by trying to load it either before or just after hyperref.sty.