Просто нашел указатель, который можно использовать ghostscript
для этого, здесь: pdftk - Добавить и редактировать закладки в pdf - Unix и Linux - Stack Exchange # 18600 ; это относится к ссылкам:
Однако вышеизложенное касается закладок, а не логической нумерации страниц. Получается из pdfmarkReference.pdf , необходимая «команда» - это /Label
«(или /PAGELABEL
») - и далее это относится к PDFReference.pdf, глава 8.3.1 «Метки страницы». К сожалению, эта глава не обязательно объясняет, как pdfmarks можно использовать с ярлыками страниц - но этот пост делает:
В / pAGELABEL pdfmark нет ключа / Page, поэтому можно установить метку только для «текущей» страницы (и, как следствие, только для одной страницы за раз). Поскольку вы вызываете его в самом начале, ожидается, что он установит метку для 1-й страницы и только для нее.
Несколько / PAGELABEL для одной и той же страницы: ссылка на pdfmark говорит, что последняя вступает в силу, поэтому результат вашей первой командной строки в порядке. Обратите внимание, что ключ / Page игнорируется.
Как установить метки страницы из PostScript? Я могу думать о 2 методах:
(A) 100% документированный способ:
Выпустите / PAGELABEL как часть каждой страницы.
(B) Менее документированный способ: ...
gswin32c -sDEVICE=pdfwrite -sOutputFile=50pages.pdf -dNOPAUSE
GS>[/_objdef {pl} /type /dict /OBJ pdfmark
GS>[{pl} <</Nums [0 <</P (Page ) /S /r /St 10>> 2 <<>>]>> /PUT pdfmark
GS>[{Catalog} <</PageLabels {pl}>> /PUT pdfmark
GS>50 { showpage } repeat
GS>quit
... и далее в этой теме:
Как сделать эту работу; Поскольку исходный файл является файлом PDF, вы можете запускать каждую страницу из файла в отдельности. Таким образом, вы можете установить pagmark PAGELABEL для страницы 1, запустить страницу 1 из исходного файла, установить PAGELABEL для страницы 2, запустить страницу 2 из исходного файла и так далее.
Поскольку метка (как и SaGS) применяется к текущей странице, это должно правильно установить метки для каждой страницы в выходном файле PDF. (предостережение: я на самом деле не пробовал это)
РЕДАКТИРОВАТЬ: просто чтобы показать это - если вы сохранили это как pdfmarks
файл:
[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage
... и вы звоните:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks
... тогда в конце вы получите три пустые страницы infile.pdf
, помеченные -1, 0 и 1 :)
Ну, может быть, это поможет когда-нибудь получить более простой gs
скрипт для перенумерации страниц :)
Ура!
РЕДАКТИРОВАТЬ 2: Думаю, понял - используйте ту же gs
команду, что и выше - и ниже приведено содержимое pdfmarks
скрипта, который перенумерует infile.pdf, поэтому он начинается с -1, 0, 1 ... Это в основном модифицированный пример из PDF-ссылка (см. комментарии для более):
% Type name (Optional) The type of PDF object that this dictionary describes; if present, must be PageLabel for a page label dictionary.
% S name (Optional) The numbering style to be used for the numeric portion of each page label:
% D Decimal arabic numerals
% R Uppercase roman numerals
% r Lowercase roman numerals
% A Uppercase letters (A to Z for the first 26 pages, AA to ZZ for the next 26, and so on)
% a Lowercase letters (a to z for the first 26 pages, aa to zz for the next 26, and so on)
% P text string (Optional) The label prefix for page labels in this range.
% St integer (Optional) The value of the numeric portion for the first page label in the range. Subsequent pages will be numbered sequentially from this value, which must be greater than or equal to 1. Default value: 1.
% renumber first 25 pages - push each by 10, and add prefix:
% [/_objdef {pl} /type /dict /OBJ pdfmark
% [{pl} <</Nums [0 <</P (Page ) /S /D /St 10>> 25 <<>>]>> /PUT pdfmark
% [{Catalog} <</PageLabels {pl}>> /PUT pdfmark
[/_objdef {pl} /type /dict /OBJ pdfmark
[{pl} <</Nums [ 0 << /P (-1) >> % just label -1 (no style) for pg 0;
1 << /P (0) >> % just label 0 (no style) for pg 1;
2 << /S /D /St 1 >> % decimal style, start from 1, for pg2 and on.
]>> /PUT pdfmark
[{Catalog} <</PageLabels {pl}>> /PUT pdfmark