В кои-то веки что-то полезное нашлось на «Askubuntu».
1) Совет Мартина Шаррера пропустить PDF через pdflatex:
\documentclass[a4paper]{article}% or use 'letterpaper'
\usepackage{pdfpages}
\usepackage[pdfpagelabels]{hyperref}
\begin{document}
% Set lower case roman numbers (\Roman would be upper case):
\renewcommand{\thepage}{\roman{page}}
\includepdf[pages=1-3]{scan.pdf}
% Back to normal (arabic) numbers:
\renewcommand{\thepage}{\arabic{page}}
% Reset page counter to 1:
\setcounter{page}{1}
\includepdf[pages=4-]{scan.pdf}
\end{document}
Из scan.pdf берутся сначала сс. 1—3 (по физической нумерации, начинающейся с 1) и вставляются во вновь создаваемый документ под логическими номерами i—iii, а затем — остальные страницы, которые вставляются под обычными арабскими номерами начиная с 1.
2) Совет Акихиро Хараи разжать PDF в текст (pdftk uncompress), отредактировать и сжать обратно (pdftk compress).
Редактируется он путем поиска /Catalog
и помещения туда что-то вроде:
/PageLabels << /Nums [
0 << /P (cover) >> % labels 1st page with the string "cover"
1 << /S /r >> % numbers pages 2-6 in small roman numerals
6 << /S /D >> % numbers pages 7-x in decimal arabic numerals
]
>>
Вот здесь синтаксис и семантика /PageLabels
разрисованы подробно: https://www.w3.org/TR/WCAG20-TECHS/PDF17.html.
Про DjVu пока только такой способ, варварский, но верный: обобщим немножко:
#!bash
#
# djvucover filename
# renames page 1 in filename to "cover" and decrements all the subsequent page "numbers" (names, in fact)
#
pages=`djvused -e n $1`
{
echo "select 1; set-page-title cover"
for (( i=2; i<=$pages; i++ ))
do
echo "select $i; set-page-title $((i-1))"
done
} | djvused -s $1
#!bash
djvused new.djvu -e 'select 2; set-page-title cover; save'