Chỉ cần tìm một con trỏ có thể sử dụng ghostscript
cho việc này, tại đây: pdftk - Thêm và chỉnh sửa dấu trang thành pdf - Unix và Linux - Stack Exchange # 18600 ; nó đề cập đến các liên kết:
Tuy nhiên, thỏa thuận trên với dấu trang - không phải với phân trang hợp lý. Hóa ra từ pdfmarkReference.pdf , "lệnh" cần thiết là ' /Label
' (hoặc ' /PAGELABEL
') - và nó đề cập thêm đến PDFReference.pdf chương 8.3.1 "Nhãn trang". Thật không may, chương đó không nhất thiết phải giải thích làm thế nào pdfmark có thể được sử dụng với nhãn trang - nhưng bài đăng này có:
Pdf / PAGELABEL không có bất kỳ phím / Trang nào, do đó, người ta chỉ có thể đặt nhãn cho trang 'hiện tại' (và do đó, chỉ có một trang cho một trang). Vì bạn gọi nó ngay từ đầu, nên bạn sẽ đặt nhãn cho trang đầu tiên và chỉ cho nó.
Nhiều / PAGELABEL cho cùng một trang: tham chiếu pdfmark cho biết cái cuối cùng có hiệu lực, vì vậy kết quả của dòng lệnh thứ 1 của bạn là OK. Lưu ý phím / Trang bị bỏ qua.
Làm cách nào để đặt nhãn trang từ PostScript? Tôi có thể nghĩ về 2 phương pháp:
(A) Cách ghi chép 100%:
Phát hành a / PAGELABEL như một phần của mỗi trang.
(B) Cách ít tài liệu hơn: ...
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
... và hơn nữa trong chủ đề đó:
Để làm cho công việc này; vì tệp gốc là tệp PDF, bạn có thể chạy từng trang từ tệp riêng lẻ. Vì vậy, bạn có thể đặt pdf PAGELABEL cho trang 1, chạy trang 1 từ tệp gốc, đặt PAGELABEL cho trang 2, chạy trang 2 từ tệp gốc, v.v.
Vì nhãn là (như SaGS) được áp dụng cho trang hiện tại, nên điều này sẽ đặt chính xác các nhãn cho từng trang trong tệp PDF đầu ra. (báo trước: Tôi chưa thực sự thử điều này)
EDIT: chỉ để hiển thị điều này - nếu bạn đã lưu pdfmarks
tệp này dưới dạng tệp:
[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage
... và bạn gọi:
gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks
... sau đó bạn sẽ nhận được ba trang trống được nối vào cuối infile.pdf
, được gắn nhãn -1, 0 và 1 :)
Chà, có lẽ điều này đôi khi giúp có được một gs
kịch bản đơn giản hơn để đánh số lại các trang :)
Chúc mừng!
EDIT2: Tôi nghĩ rằng - sử dụng cùng một gs
lệnh như trên - và bên dưới là nội dung của pdfmarks
tập lệnh, sẽ đánh số lại infile.pdf, do đó, nó bắt đầu bằng -1, 0, 1 ... Về cơ bản, đây là một ví dụ được sửa đổi từ tài liệu tham khảo PDF (xem bình luận để biết thêm):
% 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