Bir PDF'nin sayfalarını yeniden numaralandır


25

Farklı sayfalara özel sayfa numaraları atamak için taranmış bir PDF'nin meta verilerini düzenlemek istiyorum . Örneğin, şimdi sayfa 1-3 olanları i, ii ve iii olarak adlandırmak isteyebilirim ve 4-10. Sayfalardan hangilerini, 1-7'yi aramak isteyebilirim. Ben do not sayfaların gerçek sırasını değiştirmek istiyorum.

A) Bunu ücretsiz araçlar kullanarak yapmanın bir yolu; ve B) Bunu "toplu halde" yapmanın bir yolu (bu nedenle, her sayfayı manuel olarak yeniden numaralandırmak zorunda kalmazsınız).


1
LaTeX'e dayalı bir çözümden memnun olur musunuz? PDF'yi boş bir belgeye dahil etmek ve istediğiniz gibi PDF sayfa numaralarını oluşturmak mümkün olacaktır.
Martin Scharrer

LaTeX çözümüyle gerçekten mutlu olurum. Aşağıda bazı detayları gönderebilir misiniz?
MarkovCh1

Yanıtlar:


22

İşte LaTeX'e dayanan bir çözüm. pdfpagesTaranan PDF'yi (burada adı verilir scan.pdf) dahil etmek için paketi kullanır . İstediğiniz PDF sayfası etiketleri hyperref, pdfpagelabelsseçeneği etkinleştirilmiş paket kullanılarak ayarlanabilir . Normal \thepagemakroyu küçük harfli roman numaralarına tanımlanabilecek bir etiket olarak kullanır . Sayfa sayacı sıfırlanır ve tekrar normal numaralara döndürülür.

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

Yukarıdaki kodu bir dosyaya yerleştirin (örn. scan_mod.tex) Ve ile derleyin pdflatex:

# pdflatex scan_mod

Bu üretecek scan_mod.pdf. Ancak, herhangi bir özel açıklama dahil. köprüler kaybolur. Bu, taranmış PDF'lerde sorun olmamalıdır.

Buna daha sık ihtiyaç duyarsanız, roman numaralı sayfaların sayısını ve dosya adlarını argüman olarak kabul eden ve daha sonra derlenen ad ve sayıların değişken olduğu yukarıdaki kodla ilgili bir geçici dosya oluşturan bir komut dosyası yazabilirsiniz.


Tam bir cevap için teşekkür ederim! Bu harika bir çözüm. Farkında olduğum diğer çözümler .NET veya eşit derecede korkunç bir şey içeriyordu ya da Adobe Acrobat'taki diyaloglarda dolaşıyor (ki yine de karşılayamam). Bu bile komut dosyasıdır!
MarkovCh1

Güzel çözüm! Her bir bölümün / bölümün başlangıcında köprülerle sol panelde yer imleri / ana hatların toplu üretiminin aynı sorusunu merak ediyordum. LaTex'i de kullanmak mümkün müdür? İşte benim sorum askubuntu.com/questions/27312/bookmark-pdf-and-djvu-files . Teşekkürler!
Tim


Bu harika bir cevap, kullandım ve mükemmel çalışıyor.
Andrea Lazzarotto

1
@TiGR: Evet, çünkü orijinal PDF'nin sayfaları yeni bir PDF'ye eklenir ve bu süreçte köprüler ve benzeri şeyler atılır (hatırladığım gibi güvenlik için). OP taranan PDF ile ilgili olduğu için bu bir sorun değildi.
Martin Scharrer

10

Bunu bir metin editörüyle yapabilirsiniz.

Cevabın dediği gibi, bir metin editörüyle bir PDF dosyası açın, /Cataloggirişi arayın ve ardından şuna benzer bir girdi ekleyin /PageLabels:

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

Sayfa endekslerinin (fiziksel sayfa numaraları) ile başladığını unutmayın 0.

Tabii ki, bunu komut dosyası dillerini kullanarak otomatik olarak yapabilirsiniz.

PDF Standartları - Sayfa Etiketleri ayrıntılı özelliklere sahiptir.


+1 Bu cevap, kabul edilenden çok daha basit ve daha iyi, şartname ile bağlantı çok yardımcı oluyor.
jja

6

jPDF Tweak , sayfa numaralandırma (doğru terim "sayfa etiketleme") ve ileri düzey PDF düzenleme özellikleri için birçok yeni başlangıç ​​sunan bir Açık Kaynak grafik yardımcı programdır. Ubuntu ve diğer işletim sistemlerinde çalışır.

Belgeler sayfa adım adım talimatlar verilmektedir.


Teşekkürler, bana gerçekten yardımcı olan şey, formları ve herkesi korumak. jPDF Tweak, çok uygun bir arayüze sahip olmamakla birlikte, gerçekten güçlü bir şeydir.
TiGR

Asıl soru toplu işlerden bahsetmediyse, bu cevabın gerçekten kabul edilen biri olmayı hak ettiğini söyleyebilirim.
Brian Z

4

Bir PDF sayfalarını yeniden düzenlemek için ücretsiz bir araç olan PDF Mod adlı bir araç var.

Ubuntu 10.10 ve daha üstündeki Ubuntu Yazılım Merkezi'nden kurulabilir.

Ubuntu 9.10 veya 10.04’e kurmak için:

Ppa ekle yüklemek için ppa:pdfmod-team/ppa(yazılım kaynaklarına İşte bunun nasıl olduğunu ) ve yazılım merkezinden pdfmod yüklemek

Http://www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html adresinden uyarlanmıştır.

İyi şanslar: d


4
Ah, ama benim sorum sayfaların nasıl yeniden düzenleneceğini sormak değildi. Sayfaların meta verilerini değiştirmekti: sayfa numaralarını yeniden etiketleyin (ilk birkaç sayfa olarak romen rakamları ekleyin, belki birkaçını atlayın; PDF'ler öncekini destekliyor).
MarkovCh1

3

Sadece, bunun için kullanmanın mümkün olacağına dair bir işaretçi buldum ghostscript: pdftk - pdf'ye yer imleri ekleme ve düzenleme - Unix ve Linux - Stack Exchange # 18600 ; bağlantıları ifade eder:

Bununla birlikte, yukarıdakiler yer imleriyle ilgilidir - mantıksal sayfalama ile değil. PdfmarkReference.pdf dosyasından çıkıyor , gerekli "komut" /Label'(veya' /PAGELABEL') - ve ayrıca PDFReference.pdf bölüm 8.3.1 "Sayfa Etiketleri" anlamına geliyor. Ne yazık ki, bu bölüm mutlaka pdfmark'ların sayfa etiketleriyle nasıl kullanılabileceğini açıklamamaktadır - ancak bu yayın şunları yapar:

/ PAGELABEL pdfmark’ında / Page tuşu yoktur, bu nedenle bir kişi yalnızca 'geçerli' sayfa için etiket ayarlayabilir (ve sonuç olarak bir seferde sadece bir sayfa için). En başından beri aradığınızdan, ilk sayfa için ve yalnızca bunun için bir etiket belirlemesi bekleniyor.

Aynı sayfa için birden fazla / PAGELABEL: pdfmark referansı, sonuncunun etkili olduğunu söylüyor, bu yüzden ilk komut satırınızın sonucu tamam. / Sayfa tuşunun dikkate alınmadığını unutmayın.

PostScript'ten sayfa etiketleri nasıl ayarlanır? 2 yöntem düşünebilirim:

(A)% 100 belgelenmiş yolu:

Her sayfanın bir parçası olarak / PAGELABEL yayın.

(B) Daha az belgelenmiş yol: ...

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

... ve daha sonra bu konuya:

Bu işi yapmak için; Orijinal dosya bir PDF dosyası olduğundan, her sayfayı dosyadan ayrı ayrı çalıştırabilirsiniz. Böylece sayfa 1 için PAGELABEL pdfmark'ı, orijinal dosyadan sayfa 1'i çalıştırabilir, sayfa 2 için PAGELABEL'i ayarlayabilir, orijinal dosyadan sayfa 2'yi çalıştırabilirsiniz.

Etiket (SaGS gibi) geçerli sayfaya uygulandığından dolayı, bu çıktı PDF dosyasındaki her sayfa için etiketleri doğru şekilde ayarlamalıdır. (ihmal: Aslında bunu denemedim)

EDIT: sadece bunu göstermek için - eğer bunu pdfmarksdosya olarak kaydettiyseniz :

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

... ve sen ara:

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

... sonra, sonuna infile.pdf-1, 0 ve 1 etiketli üç boş sayfa verilir :)

 

Peki, belki bu bazen gssayfaları yeniden numaralandırma için daha basit bir komut dosyası almak için yardımcı olur :)
Şerefe!

 

EDIT2: Anladım, bence - gsyukarıdakiyle aynı komutu kullan - ve aşağıda pdfmarksinfile.pdf dosyasını yeniden sıralayacak olan betiğin içeriği var , yani -1, 0, 1 ile başlıyor ... Temel olarak değiştirilmiş bir örnek PDF referansı (daha fazla yorum için bakınız):

% 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

Harika! Teşekkürler, şaka
yapmazsın

2

İşi yapabilen küçük bir python betiği var: https://github.com/lovasoa/pagelabels-py

Sizin durumunuzda:

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

1
Bu harika bir çözüm!
mikemtnbikes

1

Openoffice / Libreoffice, pdf-import eklentisi ve pagination Macro ile hile yapabilir.

Mükemmel bir çözüm değil, ama benim için çalışıyor (şiddetle tavsiye ediyorum - PDF Mod kullanmanın dışında).


OpenOffice.org 3.2 için pdf-import eklentisi baskın görünüyor. İçe aktarma (Çizim ve Yazıcıya) "G / Ç hatası" veriyor.
MarkovCh1

0

PDF belgelerini işlemek için bir python kütüphanesi olan pyPdf'i deneyin . Bazıları, ancak çok fazla değil, programlama gerekli olacaktır.

Ayrı sayfalarla ilişkili sayfa numaralarını değiştirmeyi destekleyip desteklemediğini kontrol etmemiş olmama rağmen , PDFtk'ye bir göz atabilirsiniz . Her ikisi de Ubuntu'da paketler halinde mevcuttur.


1
Hm, PDFtk bunu yapabilecek gibi görünmüyor. pyPdf'in meta verileri çıkarmak için birçok yöntemi vardır, ancak bunları belgeye geri yazabilecek gibi görünmemektedir.
MarkovCh1

0

PDF Fordit adında başka bir uygulama var - kaynak forge'da barındırılıyor. Source Forge Project Page - Ancak bu yardımcı olmuyor çünkü ihtiyaç duyduğunuz işlevsellik

PDFEdit'te Metin Düzenleme


1
PDF Düzenleme'nin sayfa numaralarını değiştirebileceğini sanmıyorum. Her halükarda denedim ve başaramadım.
MarkovCh1

2
@Syzygy - gerçekten, sadece kontrol ettim: bir belgeye sahipse Dict'i pdfeditgösterebilir Catalog/PageLabels, ancak seçiliyse, şöyle yazar: " Bu sözlük doğrudan düzenlenebilir özelliklere sahip değil " ... Şerefe!
sdaau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.