Перенумерация страниц в PDF и DjVu

В кои-то веки что-то полезное нашлось на «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'
This entry was posted in Сделай сам and tagged , , , , . Bookmark the permalink.

Leave a Reply