Je viens de trouver un pointeur qu'il pourrait être possible d'utiliser ghostscript
pour cela, ici: pdftk - Ajouter et modifier des signets en pdf - Unix et Linux - Stack Exchange # 18600 ; il s'agit de liens:
Cependant, ce qui précède concerne les signets - pas la pagination logique. Il résulte de pdfmarkReference.pdf , la "commande" nécessaire est ' /Label
' (ou ' /PAGELABEL
') - et il se réfère en outre au chapitre 8.3.1 "Etiquettes de page" de PDFReference.pdf . Malheureusement, ce chapitre n'explique pas nécessairement comment les pdfmarks pourraient être utilisés avec les étiquettes de page - mais ce post fait:
Le pdfmark / PAGELABEL n'a pas de touche / Page, donc on ne peut définir le label que pour la page 'actuelle' (et, par conséquent, seulement pour une page à la fois). Puisque vous l'appelez au tout début, il est prévu de définir une étiquette pour la 1ère page et uniquement pour elle.
Plusieurs / PAGELABELs pour la même page: la référence pdfmark indique que la dernière prend effet, donc le résultat de votre 1ère ligne de commande est OK. Notez que la touche / Page est ignorée.
Comment définir des étiquettes de page à partir de PostScript? Je peux penser à 2 méthodes:
(A) La manière 100% documentée:
Émettez un / PAGELABEL dans le cadre de chaque page.
(B) La manière la moins documentée: ...
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
... et plus loin dans ce fil:
Quant à faire ce travail; comme le fichier d'origine est un fichier PDF, vous pouvez exécuter chaque page à partir du fichier individuellement. Vous pouvez donc définir le pdfmark PAGELABEL pour la page 1, exécuter la page 1 à partir du fichier d'origine, définir le PAGELABEL pour la page 2, exécuter la page 2 à partir du fichier d'origine, etc.
Étant donné que l'étiquette est (comme SaGS) dite appliquée à la page en cours, cela devrait correctement définir les étiquettes pour chaque page dans le fichier PDF de sortie. (mise en garde: je n'ai pas vraiment essayé cela)
EDIT: juste pour montrer ceci - si vous l'avez enregistré en tant que pdfmarks
fichier:
[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage
... et vous appelez:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks
... alors vous obtiendrez trois pages vides ajoutées à la fin de infile.pdf
, étiquetées -1, 0 et 1 :)
Eh bien, peut-être que cela aide parfois à obtenir un gs
script plus simple pour renuméroter les pages :) A
bientôt!
EDIT2: J'ai compris, je pense - utilisez la même gs
commande que ci-dessus - et ci-dessous le contenu du pdfmarks
script, qui renumérotera le fichier infile.pdf, il commence donc par -1, 0, 1 ... Il s'agit essentiellement d'un exemple modifié de la référence PDF (voir les commentaires pour plus):
% 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