Довольно легко поместить имена файлов в список закладок, которые могут отображать многие программы просмотра PDF.
Это делается с помощью PostScript с использованием оператора дистиллятора 'pdfmark'. Например, используйте следующее
gs -sDEVICE=pdfwrite -o finished.pdf control.ps
где control.ps содержит команды PS для печати страниц и вывода закладки (/ OUT) pdfmarks:
(examples/tiger.eps) run [ /Page 1 /Title (tiger.eps) /OUT pdfmark
(examples/colorcir.ps) run [ /Page 2 /Title (colorcir.ps) /OUT pdfmark
Обратите внимание, что вы также можете выполнить перечисление с помощью PS для автоматизации всего процесса:
/PN 1 def
(file*.pdf) {
/FN exch def
FN run
[ /Page PN /Title FN /OUT pdfmark % do the file and bookmark it by filename
/PN PN 1 add def % bump the page number
} 1000 string filenameforall
Обратите внимание, что порядок перечисления filenameforall не указан, поэтому вы можете отсортировать список
управлять порядком, используя расширение Ghostscript .sort (массив lt .sort lt).
Также подумав об этом, я также понял, что если файл импута содержит более одной страницы, есть лучший способ установить закладку на правильный номер страницы, используя свойство устройства PageCount.
[
(file*.pdf) { dup length string copy } 1000 string filenameforall
] % create array of filenames
{ lt } .sort % sort in increasing alphabetic order
/PN 1 def
{ /FN exch def
/PN currentpagedevice /PageCount get 1 add def % get current page count done (next is one greater)
FN run [ /Page PN /Title FN /OUT pdfmark % do the file and bookmark it by filename
} forall
Приведенное выше создает массив строк (копирует их в уникальные строковые объекты, так как filenameforall
просто перезаписывает полученную строку), затем сортирует ее и, наконец, обрабатывает массив строк
используя оператор Forall. Используя свойство устройства PageCount для получения количества уже созданных страниц, номер страницы (PN) для закладки будет правильным. Я протестировал этот фрагмент как «control.ps».