Właśnie znalazłem wskaźnik, którego można by ghostscript
do tego użyć , tutaj: pdftk - Dodaj i edytuj zakładki do pdf - Unix i Linux - Stack Exchange # 18600 ; odnosi się do linków:
Powyższe dotyczy jednak zakładek - nie logicznego podziału na strony. Okazuje się, że z pdfmarkReference.pdf potrzebne „polecenie” to „ /Label
” (lub „ /PAGELABEL
”) - i dalej odnosi się do PDFReference.pdf rozdział 8.3.1 „Etykiety stron”. Niestety ten rozdział niekoniecznie wyjaśnia, w jaki sposób można używać znaczników pdf z etykietami stron - ale ten post:
Znak pdf / PAGELABEL nie ma żadnego klawisza / Page, więc można ustawić etykietę tylko dla „bieżącej” strony (aw konsekwencji tylko dla jednej strony na raz). Ponieważ nazywasz to na samym początku, oczekuje się, że określi etykietę dla 1. strony i tylko dla niej.
Wiele / PAGELABEL dla tej samej strony: odwołanie do znacznika pdf mówi, że ostatnia obowiązuje, więc wynik pierwszego wiersza poleceń jest OK. Uwaga: klawisz / Page jest ignorowany.
Jak ustawić etykiety stron z PostScript? Mogę wymyślić 2 metody:
(A) W 100% udokumentowany sposób:
Wydaj / PAGELABEL jako część każdej strony.
(B) Mniej udokumentowany sposó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
... i dalej w tym wątku:
Co do tego, żeby to działało; ponieważ oryginalny plik jest plikiem PDF, możesz uruchomić każdą stronę z pliku osobno. Możesz więc ustawić znak pdf PAGELABEL dla strony 1, uruchomić stronę 1 z oryginalnego pliku, ustawić PAGELABEL dla strony 2, uruchomić stronę 2 z oryginalnego pliku i tak dalej.
Ponieważ etykieta jest (jak powiedział SaGS) stosowana do bieżącej strony, powinno to poprawnie ustawić etykiety dla każdej strony w wyjściowym pliku PDF. (zastrzeżenie: nie próbowałem tego)
EDYCJA: aby to pokazać - jeśli masz to zapisane jako pdfmarks
plik:
[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage
... a ty dzwonisz:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks
... wtedy na końcu zostaną dodane trzy puste strony infile.pdf
, oznaczone jako -1, 0 i 1 :)
Cóż, może to kiedyś pomoże uzyskać prostszy gs
skrypt do zmiany numeracji stron :)
Pozdrawiam!
EDIT2: Rozumiem, myślę - użyj tego samego gs
polecenia co powyżej - a poniżej znajduje się zawartość pdfmarks
skryptu, który zmieni numerację pliku infile.pdf, więc zaczyna się od -1, 0, 1 ... Jest to w zasadzie zmodyfikowany przykład z odniesienie do pliku PDF (więcej komentarzy w komentarzach):
% 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