Щойно знайшов вказівник, який можна було б використовувати ghostscript
для цього, ось тут: pdftk - додавання та редагування закладок у pdf - Unix та Linux - обмін стеками №18600 ; воно посилається на посилання:
Однак, вищезгадане стосується закладок, а не логічної сторінки. Виявляється, що з pdfmarkReference.pdf потрібна "команда" є " /Label
" (або " /PAGELABEL
"), і далі вона посилається на PDFReference.pdf глава 8.3.1 "Мітки сторінки". На жаль, ця глава не обов'язково пояснює, як можна використовувати PDF-позначки з мітками сторінок, але ця публікація:
У pdfmark / PAGELABEL немає жодного ключа / Page, тому ви можете встановити мітку лише для "поточної" сторінки (і, як наслідок, лише для однієї сторінки одночасно). Оскільки ви називаєте це на самому початку, очікується встановити мітку для 1-ї сторінки та лише для неї.
Кілька / PAGELABEL для однієї сторінки: посилання pdfmark говорить про те, що останній набирає чинності, тому результат вашого першого командного рядка нормальний. Зверніть увагу, що клавіша / Сторінка ігнорується.
Як встановити мітки сторінки з PostScript? Я можу придумати два способи:
(A) 100% документально підтверджений спосіб:
Видайте / PAGELABEL як частину кожної сторінки.
(Б) Менш задокументований спосіб: ...
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-файл, ви можете запустити кожну сторінку з файлу окремо. Таким чином, ви можете встановити PAGELABEL pdfmark для сторінки 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
скрипт для перенумерування сторінок :)
Привіт!
EDIT2: Зрозумів - я використовую ту ж 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