É bastante simples adicionar marcadores a um PDF usando o Ghostscript . A sintaxe é:
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmarks
Onde pdfmarks é um arquivo de texto com conteúdo como:
[/Title (Title Page) /Page 1 /OUT pdfmark
[/Title (Table of Contents) /Page 3 /OUT pdfmark
...
Para níveis aninhados, use o atributo / Count. Por exemplo:
[/Count 3 /Title (Chapter 1) /Page 1 /OUT pdfmark
[/Count -2 /Title (Section 1.1) /Page 2 /OUT pdfmark
[/Title (Section 1.1.1) /Page 3 /OUT pdfmark
[/Title (Section 1.1.2) /Page 4 /OUT pdfmark
[/Count -1 /Title (Section 1.2) /Page 5 /OUT pdfmark
[/Title (Section 1.2.1) /Page 6 /OUT pdfmark
[/Title (Section 1.3) /Page 7 /OUT pdfmark
O argumento para / Count fornece o número de marcadores imediatamente subordinados. O sinal do argumento define a exibição padrão (negativo para fechado, positivo para aberto).
Se os marcadores não forem suficientes como um Índice, existem aplicativos que crie um índice a partir de marcadores. Eu não usei nada disso, mas googling apareceu por exemplo, o TOCBuilder da Mapsoft, que é um plug-in comercial do Adobe Acrobat com avaliação.
Fontes:
marcadores PDF com Ghostscript
Como gerar marcadores via ghostscript / pdfwrite / pdfmark