Beri nomor baru halaman PDF


25

Saya ingin mengedit metadata dari PDF yang dipindai untuk menetapkan nomor halaman khusus ke halaman yang berbeda. Misalnya, apa yang sekarang halaman 1-3 Saya mungkin ingin menelepon saya, ii dan iii, dan apa halaman 4-10, saya ingin menelepon 1-7. Saya tidak ingin mengubah urutan halaman yang sebenarnya.

Apakah ada A) Cara untuk melakukan ini sama sekali menggunakan alat gratis; dan B) Cara untuk melakukan ini "dalam batch" (jadi, tanpa harus memberi nomor baru setiap halaman secara manual).


1
Apakah Anda senang dengan solusi yang didasarkan pada LaTeX? Dimungkinkan untuk memasukkan PDF ke dalam dokumen kosong atau membuat nomor halaman PDF sesuka Anda.
Martin Scharrer

Saya memang akan senang dengan solusi LaTeX. Bisakah Anda memposting beberapa detail di bawah ini?
MarkovCh1

Jawaban:


22

Berikut solusi berdasarkan LaTeX. Ia menggunakan pdfpagespaket untuk menyertakan PDF yang dipindai (di sini disebut scan.pdf). Label halaman PDF yang Anda inginkan dapat diatur menggunakan hyperrefpaket dengan pdfpagelabelsopsi yang diaktifkan. Ini menggunakan \thepagemakro normal sebagai label yang dapat didefinisikan untuk menurunkan angka romawi. Penghitung halaman kemudian diatur ulang dan diubah kembali ke angka normal.

\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}

Tempatkan kode di atas ke dalam file (mis. scan_mod.tex) Dan kompilasi dengan pdflatex:

# pdflatex scan_mod

Ini akan menghasilkan scan_mod.pdf. Namun, setiap anotasi khusus termasuk. hyperlink akan hilang. Ini seharusnya tidak menjadi masalah dengan PDF yang dipindai.

Jika Anda membutuhkan ini lebih sering, Anda dapat menulis skrip yang menerima jumlah halaman bernomor roman dan nama file sebagai argumen dan membuat tempfile dengan kode di atas di mana nama dan angka adalah variabel, yang kemudian dikompilasi.


Terima kasih atas jawaban yang saksama! Ini solusi hebat. Satu-satunya solusi lain yang saya sadari termasuk .NET atau sesuatu yang sama mengerikannya, atau mengarungi dialog dalam Adobe Acrobat (yang toh saya tidak mampu membelinya). Ini bahkan bisa skrip!
MarkovCh1

Solusi bagus! Saya bertanya-tanya tentang pertanyaan yang sama tentang pembuatan batch bookmark / garis besar di panel kiri dengan hyperlink ke awal setiap bagian / bab. Apakah mungkin menggunakan LaTex juga? Ini pertanyaan saya askubuntu.com/questions/27312/bookmark-pdf-and-djvu-files . Terima kasih!
Tim

2
@Tim: Anda dapat membuat bookmark PDF dengan LaTeX saat menggabungkan PDF. Lihat jawaban saya untuk Bagaimana saya menggunakan LaTeX untuk membuat daftar isi (judul bab, subbagian dll) untuk satu set file pdf yang saya gabungkan menjadi satu pdf besar? di TeX.SX.
Martin Scharrer

Ini adalah jawaban yang fantastis, saya menggunakannya dan berfungsi dengan baik.
Andrea Lazzarotto

1
@ TiGR: Ya, itu karena halaman-halaman dari PDF asli ditambahkan ke PDF baru dan dalam proses ini hyperlink dan hal-hal serupa dibuang (untuk keselamatan seperti yang saya ingat). Karena OP tentang pemindaian PDF, ini bukan masalah.
Martin Scharrer

10

Anda dapat melakukannya dengan editor teks.

Seperti jawabannya, buka file PDF dengan editor teks, /Catalogentri pencarian , dan kemudian tambahkan entri dengan nama /PageLabelsseperti ini:

/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
]
>>

Perhatikan bahwa indeks halaman (nomor halaman fisik) dimulai dengan 0.

Tentu saja, Anda dapat melakukan ini secara otomatis menggunakan bahasa scripting.

Standar PDF - Label Halaman memiliki spesifikasi terperinci.


+1 Jawaban ini jauh lebih sederhana dan lebih baik daripada yang diterima, dan tautan ke spesifikasi sangat membantu.
jja

6

jPDF Tweak adalah utilitas grafis Open Source yang menawarkan penomoran halaman (istilah yang benar adalah "pelabelan halaman") dan banyak fitur pengeditan PDF tingkat pemula dan lanjutan lainnya. Ini berjalan di Ubuntu dan sistem operasi lainnya.

The Dokumentasi Halaman memberikan petunjuk langkah-demi-langkah.


Terima kasih, ini yang benar-benar membantu saya, melestarikan formulir dan semuanya. jPDF Tweak adalah hal yang sangat kuat, meskipun dengan antarmuka yang tidak terlalu nyaman.
TiGR

Jika pertanyaan awal tidak menyebutkan pekerjaan batch, saya akan mengatakan jawaban ini benar-benar layak untuk diterima.
Brian Z

4

Ada alat yang disebut PDF Mod yang merupakan alat gratis untuk mengatur ulang halaman-halaman PDF.

Ini dapat diinstal dari Pusat Perangkat Lunak Ubuntu di Ubuntu 10.10 dan lebih tinggi.

Untuk menginstal di Ubuntu 9.10 atau 10.04:

Untuk menginstal Tambahkan ppa ppa:pdfmod-team/ppake sumber perangkat lunak Anda ( Berikut cara melakukannya ) dan instal pdfmod dari pusat perangkat lunak

Diadaptasi dari: http://www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html

Semoga Sukses: D


4
Ah, tapi pertanyaan saya tidak bertanya tentang bagaimana mengatur ulang halaman. Itu untuk mengubah metadata untuk halaman-halaman: beri label ulang nomor halaman (masukkan angka romawi sebagai beberapa halaman pertama, mungkin lewati beberapa; PDF pasti mendukung yang pertama).
MarkovCh1

3

Baru saja menemukan pointer yang dapat digunakan ghostscriptuntuk ini, di sini: pdftk - Tambahkan dan edit bookmark ke pdf - Unix dan Linux - Stack Exchange # 18600 ; mengacu pada tautan:

Namun, kesepakatan di atas dengan bookmark - tidak dengan pagination logis Ternyata dari pdfmarkReference.pdf , "perintah" yang dibutuhkan adalah ' /Label' (atau ' /PAGELABEL') - dan selanjutnya merujuk ke PDFReference.pdf bab 8.3.1 "Label Halaman". Sayangnya, bab itu tidak perlu menjelaskan bagaimana pdfmarks dapat digunakan dengan label halaman - tetapi posting ini tidak:

Pdfmark / PAGELABEL tidak memiliki kunci / Halaman, jadi orang dapat mengatur label hanya untuk halaman 'saat ini' (dan, sebagai konsekuensinya, hanya untuk satu halaman pada suatu waktu). Karena Anda menyebutnya di awal, itu diharapkan untuk menetapkan label untuk halaman 1 dan hanya untuk itu.

Banyak / PAGELABEL untuk halaman yang sama: referensi pdfmark mengatakan yang terakhir berlaku, sehingga hasil dari commandline 1 Anda OK. Perhatikan tombol / Halaman diabaikan.

Bagaimana cara mengatur label halaman dari PostScript? Saya dapat memikirkan 2 metode:

(A) Cara didokumentasikan 100%:

Keluarkan a / PAGELABEL sebagai bagian dari setiap halaman.

(B) Cara yang kurang terdokumentasi: ...

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

... dan selanjutnya di utas itu:

Seperti untuk membuat pekerjaan ini; karena file asli adalah file PDF, Anda dapat menjalankan setiap halaman dari file satu per satu. Jadi Anda dapat mengatur pAGELABEL pdfmark untuk halaman 1, jalankan halaman 1 dari file asli, atur PAGELABEL untuk halaman 2, jalankan halaman 2 dari file asli dan seterusnya.

Karena label (seperti SaGS) dikatakan berlaku untuk halaman saat ini, ini harus dengan benar mengatur label untuk setiap halaman dalam file PDF output. (peringatan: Saya belum benar-benar mencoba ini)

EDIT: hanya untuk menunjukkan ini - jika Anda menyimpan ini sebagai pdfmarksfile:

[ /Label (-1) /PAGELABEL pdfmark
showpage
[ /Label (0) /PAGELABEL pdfmark
showpage
[ /Label (1) /PAGELABEL pdfmark
showpage

... dan Anda menelepon:

gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks

... maka Anda akan mendapatkan tiga halaman kosong ditambahkan di akhir infile.pdf, berlabel -1, 0 dan 1 :)

 

Yah, mungkin ini membantu kadang-kadang untuk mendapatkan gsskrip yang lebih sederhana untuk memberi nomor baru pada halaman :)
Ceria!

 

EDIT2: Mengerti, saya pikir - gunakan gsperintah yang sama seperti di atas - dan di bawah ini adalah isi dari pdfmarksskrip, yang akan memberi nomor baru infile.pdf, jadi itu dimulai dengan -1, 0, 1 ... Ini pada dasarnya adalah contoh modifikasi dari referensi PDF (lihat komentar untuk lebih lanjut):

% 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

Besar! Terima kasih, Anda tidak bercanda :)
MarkovCh1

3

Ada skrip python kecil, yang dapat melakukan pekerjaan: https://github.com/lovasoa/pagelabels-py

Dalam panggilan kasus Anda:

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

1
Ini solusi hebat!
mikemtnbikes

1
Ini bekerja seperti pesona, penghemat waktu yang sangat besar juga!
Bastian

1

Openoffice / Libreoffice dapat melakukan trik dengan ekstensi pdf-import dan makro pagination.

Bukan solusi yang sempurna, tetapi berfungsi untuk saya (selain menggunakan PDF Mod - yang saya sarankan).


Ekstensi pdf-import tampaknya rusak untuk OpenOffice.org 3.2. Mengimpor (ke Draw dan Writer) memberikan "kesalahan I / O."
MarkovCh1

0

Coba pyPdf , pustaka python untuk memanipulasi dokumen PDF. Beberapa, tetapi tidak banyak, pemrograman akan diperlukan.

Anda juga dapat melihat PDFtk , meskipun saya belum memeriksa apakah ini mendukung perubahan nomor halaman yang terkait dengan masing-masing halaman. Keduanya tersedia sebagai paket di Ubuntu.


1
Hm, sepertinya PDFtk tidak bisa melakukannya. pyPdf memiliki banyak metode untuk mengekstraksi metadata, tetapi tampaknya tidak dapat menuliskannya kembali ke dalam dokumen.
MarkovCh1

0

Ada aplikasi lain di luar sana yang disebut PDFEdit - yang dihosting di sumber menempa. Source Forge Project Page - Namun ini tidak membantu karena itu bukan fungsi yang Anda butuhkan

Pengeditan Teks dalam PDFEdit


1
Saya sebenarnya tidak berpikir Edit PDF dapat mengubah nomor halaman. Saya sudah mencoba dan belum berhasil.
MarkovCh1

2
@Syzygy - memang, baru saja diperiksa: pdfeditdapat menampilkan Catalog/PageLabelsDict jika dokumen memilikinya, tetapi jika dipilih, dikatakan: " Kamus ini tidak memiliki properti yang langsung dapat diedit " ... Ceria!
sdaau
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.