Acabo de encontrar un puntero que podría ser posible usar ghostscript
para esto, aquí: pdftk - Agregar y editar marcadores a pdf - Unix y Linux - Stack Exchange # 18600 ; se refiere a enlaces:
Sin embargo, lo anterior trata con marcadores, no con paginación lógica. Resulta de pdfmarkReference.pdf , el "comando" necesario es ' /Label
' (o ' /PAGELABEL
'), y se refiere además al capítulo 8.3.1 de PDFReference.pdf "Etiquetas de página". Desafortunadamente, ese capítulo no explica necesariamente cómo se pueden usar las marcas pdf con las etiquetas de página, pero esta publicación sí:
La marca / PAGELABEL pdf no tiene ninguna tecla / Página, por lo que se puede establecer la etiqueta solo para la página 'actual' (y, como consecuencia, solo para una página a la vez). Como lo llama desde el principio, se espera que establezca una etiqueta para la primera página y solo para ella.
Múltiples / PAGELABELs para la misma página: la referencia de pdfmark dice que la última tiene efecto, por lo que el resultado de su primera línea de comando está bien. Tenga en cuenta que la tecla / Página se ignora.
¿Cómo establecer etiquetas de página desde PostScript? Puedo pensar en 2 métodos:
(A) La forma 100% documentada:
Emita a / PAGELABEL como parte de cada página.
(B) La forma menos documentada: ...
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
... y más en ese hilo:
En cuanto a hacer que esto funcione; Como el archivo original es un archivo PDF, puede ejecutar cada página desde el archivo individualmente. Por lo tanto, puede configurar la marca pdf PAGELABEL para la página 1, ejecutar la página 1 desde el archivo original, configurar la PAGELABEL para la página 2, ejecutar la página 2 desde el archivo original y así sucesivamente.
Debido a que la etiqueta se aplica (como SaGS) a la página actual, esto debería establecer correctamente las etiquetas para cada página en el archivo PDF de salida. (advertencia: en realidad no he intentado esto)
EDITAR: solo para mostrar esto, si tiene esto guardado como pdfmarks
archivo:
[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage
... y llamas:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks
... entonces obtendrá tres páginas vacías al final de infile.pdf
, etiquetadas con -1, 0 y 1 :)
Bueno, tal vez esto ayude en algún momento a obtener un gs
script más simple para renumerar las páginas :)
¡Salud!
EDIT2: Creo que lo tengo, use el mismo gs
comando que el anterior, y debajo están los contenidos del pdfmarks
script, que renumerará el archivo infile.pdf, por lo que comienza con -1, 0, 1 ... Es básicamente un ejemplo modificado de la referencia en PDF (ver comentarios para más):
% 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