Làm mới các trang của PDF


25

Tôi muốn chỉnh sửa siêu dữ liệu của tệp PDF được quét để gán số trang tùy chỉnh cho các trang khác nhau. Ví dụ: trang 1-3 hiện tại tôi có thể muốn gọi i, ii và iii và trang 4-10 là gì, tôi muốn gọi 1-7. Tôi không muốn thay đổi thứ tự thực tế của các trang.

Có A) Một cách để làm điều này ở tất cả bằng cách sử dụng các công cụ miễn phí; và B) Một cách để thực hiện việc này "theo đợt" (vì vậy, không cần phải đánh số lại từng trang theo cách thủ công).


1
Bạn có hài lòng với giải pháp dựa trên LaTeX không? Có thể đưa PDF vào một tài liệu trống và tạo số trang PDF theo ý muốn.
Martin Scharrer

Tôi thực sự sẽ rất vui với giải pháp LaTeX. Bạn có thể gửi một số chi tiết dưới đây?
MarkovCh1

Câu trả lời:


22

Đây là một giải pháp dựa trên LaTeX. Nó sử dụng pdfpagesgói để bao gồm PDF được quét (ở đây được gọi là scan.pdf). Các nhãn trang PDF bạn muốn có thể được đặt bằng cách sử dụng hyperrefgói với pdfpagelabelstùy chọn được bật. Nó sử dụng \thepagemacro bình thường như một nhãn có thể được xác định cho các số La Mã viết thường. Bộ đếm trang sau đó được đặt lại và thay đổi trở lại số bình thường.

\documentclass[a4paper]{article}% or use 'letterpaper'
\usepackage{pdfpages}
\usepackage[pdfpagelabels]{hyperref}
\begin{document}
% Set lower case roman numbers (\Roman would be upper case):
\renewcommand{\thepage}{\roman{page}}
\includepdf[pages=1-3]{scan.pdf}
% Back to normal (arabic) numbers:
\renewcommand{\thepage}{\arabic{page}}
% Reset page counter to 1:
\setcounter{page}{1}
\includepdf[pages=4-]{scan.pdf}
\end{document}

Đặt mã trên vào một tệp (ví dụ scan_mod.tex) và biên dịch nó với pdflatex:

# pdflatex scan_mod

Điều này sẽ sản xuất scan_mod.pdf. Tuy nhiên, bất kỳ chú thích đặc biệt bao gồm. siêu liên kết sẽ biến mất. Đây không phải là bất kỳ vấn đề với các tệp PDF được quét.

Nếu bạn cần điều này thường xuyên hơn, bạn có thể viết một tập lệnh chấp nhận số lượng trang được đánh số la mã và tên tệp làm đối số và tạo một tempfile với mã ở trên trong đó tên và số là biến, sau đó được biên dịch.


Cảm ơn bạn đã trả lời thấu đáo như vậy! Đây là một giải pháp tuyệt vời. Các giải pháp khác duy nhất tôi biết bao gồm .NET hoặc một cái gì đó kinh khủng không kém, hoặc lội qua các hộp thoại trong Adobe Acrobat (dù sao tôi cũng không đủ khả năng). Điều này thậm chí là kịch bản!
MarkovCh1

Giải pháp tốt đẹp! Tôi đã tự hỏi về cùng một câu hỏi về việc tạo ra các dấu trang / phác thảo hàng loạt trên bảng điều khiển bên trái với các siêu liên kết đến đầu mỗi phần / chương. Có thể sử dụng LaTex không? Đây là câu hỏi của tôi Askubfox.com/questions/27312/bookmark-pdf-and-djvu-files . Cảm ơn!
Tim

2

Đây là một câu trả lời tuyệt vời, tôi đã sử dụng nó và nó hoạt động hoàn hảo.
Andrea Lazzarotto

1
@TiGR: Có, đó là vì các trang của PDF gốc được thêm vào một tệp PDF mới và trong quá trình này, các siêu liên kết và những thứ tương tự bị loại bỏ (vì an toàn như tôi nhớ). Bởi vì OP đã quét PDF, đây không phải là vấn đề.
Martin Scharrer

10

Bạn có thể làm điều đó với một trình soạn thảo văn bản.

Như câu trả lời, hãy mở tệp PDF bằng trình soạn thảo văn bản, /Catalogmục nhập tìm kiếm , sau đó nối thêm một mục có tên /PageLabelsnhư sau:

/PageLabels << /Nums [
0 << /P (cover) >> % labels 1st page with the string "cover"
1 << /S /r >> % numbers pages 2-6 in small roman numerals
6 << /S /D >> % numbers pages 7-x in decimal arabic numerals
]
>>

Lưu ý rằng các chỉ mục trang (số trang vật lý) bắt đầu bằng 0.

Nguồn, bạn có thể tự động làm điều này bằng các ngôn ngữ script.

Tiêu chuẩn PDF - Nhãn trang có thông số kỹ thuật chi tiết.


+1 Câu trả lời này đơn giản và tốt hơn nhiều so với câu trả lời được chấp nhận và liên kết đến thông số kỹ thuật là một trợ giúp tuyệt vời.
jja

6

jPDF Tweak là một tiện ích đồ họa Nguồn mở cung cấp đánh số trang (thuật ngữ chính xác là "ghi nhãn trang") và nhiều tính năng chỉnh sửa PDF nâng cao cho người mới bắt đầu. Nó chạy trên Ubuntu và các hệ điều hành khác.

Các Tài liệu trang cung cấp từng bước hướng dẫn.


Cảm ơn, đây là những gì thực sự giúp tôi, giữ gìn hình thức và tất cả. jPDF Tweak là thứ thực sự mạnh mẽ, mặc dù với giao diện không thuận tiện lắm.
TiGR

Nếu câu hỏi ban đầu không đề cập đến các công việc hàng loạt, tôi sẽ nói câu trả lời này thực sự xứng đáng là câu hỏi được chấp nhận.
Brian Z

4

Có một công cụ gọi là PDF Mod, một công cụ miễn phí để sắp xếp lại các trang của PDF.

Nó có thể được cài đặt từ Trung tâm phần mềm Ubuntu trong Ubuntu 10.10 trở lên.

Để cài đặt trong Ubuntu 9.10 hoặc 10.04:

Để cài đặt Thêm ppa ppa:pdfmod-team/ppavào nguồn phần mềm của bạn ( Dưới đây là cách thực hiện ) và cài đặt pdfmod từ trung tâm phần mềm

Chuyển thể từ: http://www.webupd8.org/2011/03/edit-pdf-document-in-linux-with-pdf.html

Chúc may mắn: D


4
À, nhưng câu hỏi của tôi không hỏi về cách sắp xếp lại các trang. Đó là thay đổi siêu dữ liệu cho các trang: dán lại số trang (chèn số La Mã làm vài trang đầu tiên, có thể bỏ qua một vài; PDF chắc chắn hỗ trợ trước đây).
MarkovCh1

3

Chỉ cần tìm một con trỏ có thể sử dụng ghostscriptcho 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 pdfmarkstệ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 gskị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 gslệnh như trên - và bên dưới là nội dung của pdfmarkstậ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

Tuyệt quá! Cảm ơn, bạn đừng đùa nữa :)
MarkovCh1

2

Có một kịch bản python nhỏ, có thể thực hiện công việc: https://github.com/lovasoa/pagelabels-py

Trong trường hợp của bạn gọi:

./addpagelabels.py --delete file.pdf
./addpagelabels.py --startpage 1 --type 'roman lowercase' file.pdf
./addpagelabels.py --startpage 4 --type arabic file.pdf

1
Đây là một giải pháp tuyệt vời!
mikemtnbike

1

Openoffice / Libreoffice có thể thực hiện thủ thuật với tiện ích mở rộng nhập pdf và Macro phân trang.

Không phải là một giải pháp hoàn hảo, nhưng nó hiệu quả với tôi (ngoài việc sử dụng PDF Mod - mà tôi rất muốn đề xuất).


Phần mở rộng nhập pdf có vẻ như đã được bán cho OpenOffice.org 3.2. Nhập (vào Draw và Writer) sẽ đưa ra "lỗi I / O."
MarkovCh1

0

Thử pyPdf , một thư viện python để thao tác các tài liệu PDF. Một số, nhưng không nhiều, lập trình sẽ là cần thiết.

Bạn cũng có thể xem PDFtk , mặc dù tôi chưa kiểm tra xem nó có hỗ trợ thay đổi số trang được liên kết với các trang riêng lẻ không. Cả hai đều có sẵn dưới dạng các gói trong Ubuntu.


1
Hừm, PDFtk dường như không thể làm được. pyPdf có nhiều phương pháp để trích xuất siêu dữ liệu, nhưng dường như không thể ghi lại chúng vào tài liệu.
MarkovCh1

0

Có một ứng dụng khác ngoài đó gọi là PDFEdit - ứng dụng được lưu trữ trên giả mạo nguồn. Trang dự án Source Forge - Tuy nhiên điều này không hữu ích vì nó không có chức năng bạn yêu cầu

Chỉnh sửa văn bản trong PDFEdit


1
Tôi thực sự không nghĩ rằng Chỉnh sửa PDF có thể thay đổi số trang. Tôi đã thử và không thành công, trong mọi trường hợp.
MarkovCh1

2
@Syzygy - thực sự, chỉ cần kiểm tra: pdfeditcó thể hiển thị Catalog/PageLabelsDict nếu tài liệu có nó, nhưng nếu nó được chọn, nó nói: " Từ điển này không có bất kỳ thuộc tính có thể chỉnh sửa trực tiếp nào " ... Chúc mừng!
sdaau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.