PDFのページ番号を付け直す


25

スキャンしたPDFのメタデータを編集して、カスタムページ番号を異なるページに割り当てたい。たとえば、現在ページ1〜3になっているものをi、ii、iiiに呼び出したい場合、ページ4〜10にあるものを1〜7に呼び出したい場合があります。しないページの実際の順序を変更したくん。

A)無料のツールを使用してこれを行う方法。およびB)これを「バッチ」で行う方法(したがって、各ページに手動で番号を付け直す必要はありません)。


1
LaTeXに基づくソリューションに満足しますか?空のドキュメントにPDFを含めて、必要に応じてPDFページ番号を作成することができます。
マーティンシャーラー

確かに、LaTeXソリューションに満足しています。以下に詳細を投稿できますか?
-MarkovCh1

回答:


22

これは、LaTeXに基づいたソリューションです。pdfpagesパッケージを使用して、スキャンしたPDF(ここではscan.pdf)を含めます。必要なPDFページのラベルhyperrefは、pdfpagelabelsオプションを有効にしてパッケージを使用して設定できます。\thepage小文字のローマ数字に定義できる通常のマクロをラベルとして使用します。その後、ページカウンタがリセットされ、通常の数値に戻ります。

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

上記のコードをファイル(例scan_mod.tex)に配置し、次のコマンドでコンパイルしpdflatexます:

# pdflatex scan_mod

これによりが生成されscan_mod.pdfます。ただし、特別な注釈は含まれます。ハイパーリンクが消えます。これは、スキャンしたPDFで問題になることはありません。

より頻繁にこれが必要な場合は、ローマ数字のページ数とファイル名を引数として受け入れ、名前と数字が変数である上記のコードで一時ファイルを作成し、コンパイルされるスクリプトを書くことができます。


徹底的な回答ありがとうございます!これは素晴らしい解決策です。私が知っていた他の唯一のソリューションには、.NETまたは同様に恐ろしいもの、またはAdobe Acrobatのダイアログを介して歩くもの(いずれにしても余裕はありません)が含まれていました。これもスクリプト化可能です!
-MarkovCh1

いい解決策!左パネルのブックマーク/アウトラインのバッチ生成と、各セクション/チャプターの先頭へのハイパーリンクの同じ問題について疑問に思っていました。LaTexも使用できますか?ここに私の質問askubuntu.com/questions/27312/bookmark-pdf-and-djvu-filesがあります。ありがとう!
ティム

2
@Tim:PDFを結合するときに、LaTeXでPDFブックマークを作成できます。LaTeXを使用して、1つの大きなpdfにマージする一連のpdfファイルの目次(章の見出し、サブセクションなど)を作成する方法に対する回答を参照してくださいTeX.SXで。
マーティンシャーラー

これは素晴らしい答えです。私はそれを使用しましたが、完璧に機能します。
アンドレアラザロット

1
@TiGR:はい。元のPDFのページが新しいPDFに追加され、このプロセスでハイパーリンクなどが破棄されるためです(覚えているように安全のため)。OPはスキャンされたPDFに関するものであったため、これは問題ではありませんでした。
マーティンシャーラー14年

10

テキストエディターでそれを行うことができます。

答えが示すように、テキストエディターでPDFファイルを開き、/Catalogエントリを検索して、次の/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
]
>>

ページインデックス(物理ページ番号)はで始まることに注意してください0

もちろん、スクリプト言語を使用してこれを自動的に行うことができます。

PDF標準-ページラベルには詳細な仕様があります。


+1この回答は受け入れられているものよりもはるかに単純で優れており、仕様へのリンクは大きな助けになります。
jja

6

jPDF Tweakは、ページ番号(正しい用語は「ページラベリング」)とその他の多くの初心者から高度なPDF編集機能を提供するオープンソースのグラフィカルユーティリティです。Ubuntuおよびその他のオペレーティングシステムで実行されます。

ドキュメントのページには、ステップバイステップの手順を説明します。


おかげで、これが本当に私を助けてくれました。jPDF Tweakは非常に強力なものですが、あまり便利なインターフェイスではありません。
TiGR 14年

元の質問でバッチジョブに言及していなかった場合、この回答は本当に受け入れられるに値すると思います。
ブライアンZ

4

PDFのページを再配置する無料のツールであるPDF Modと呼ばれるツールがあります。

Ubuntu 10.10以降のUbuntu Software Centerからインストールできます。

Ubuntu 9.10または10.04にインストールするには:

インストールするにはppa:pdfmod-team/ppaソフトウェアソースにppa を追加し(方法は次のとおりです)、ソフトウェアセンターからpdfmodをインストールします。

から適応: http //www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html

幸運:D


4
ああ、しかし、私の質問はページの再配置方法について尋ねていませんでした。それはページのメタデータを変更することでした:ページ番号のラベルを変更します(最初の数ページにローマ数字を挿入し、おそらくいくつかをスキップします; PDFは前者を確実にサポートします)。
-MarkovCh1

3

ghostscriptここで、これに使用できるポインターを見つけました。。pdftk-pdfへのブックマークの追加と編集-UnixおよびLinux-Stack Exchange#18600 ; リンクを参照します:

ただし、上記はブックマークを扱います-論理的なページネーションではありません。それはpdfmarkReference.pdfから判明し、必要な「コマンド」は ' /Label'(または ' /PAGELABEL')です-さらにPDFReference.pdfの 8.3.1章「ページラベル」を参照します。残念ながら、この章では、ページラベルでpdfmarkを使用する方法を必ずしも説明していませんが、この投稿では次のように説明しています。

/ PAGELABEL pdfmarkには/ Pageキーがないため、「現在の」ページのみにラベルを設定できます(結果として、一度に1ページのみに設定できます)。最初に呼び出すので、最初のページにのみラベルを設定する必要があります。

同じページに複数の/ PAGELABELs:pdfmarkリファレンスは、最後の1つが有効になるため、最初のコマンドラインの結果は問題ないことを示しています。/ Pageキーは無視されることに注意してください。

PostScriptからページラベルを設定する方法は?私は2つの方法を考えることができます:

(A)100%文書化された方法:

各ページの一部として/ PAGELABELを発行します。

(B)あまり文書化されていない方法:...

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

...そしてそのスレッドでさらに:

この作品を作ることに関して; 元のファイルはPDFファイルであるため、ファイルから各ページを個別に実行できます。したがって、ページ1にPAGELABEL pdfmarkを設定し、元のファイルからページ1を実行し、ページ2にPAGELABELを設定し、元のファイルからページ2を実行します。

ラベルは(SaGSのように)現在のページに適用されるため、出力PDFファイルの各ページにラベルを正しく設定する必要があります。(注意:実際にこれを試したことはありません)

編集:これを表示するだけ-これをpdfmarksファイルとして保存している場合:

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

...そしてあなたは電話する:

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

...その後infile.pdf、-1、0、1のラベルが付いたの末尾に3つの空のページが追加されます:)

 

おそらく、これはgsページの番号を付け直すための簡単なスクリプトを取得するのに役立つかもしれません:)
乾杯!

 

EDIT2:わかりましたgs-上と同じコマンドを使用します- 以下はpdfmarksスクリプトの内容であり、infile.pdfの番号を付け直しますので、-1、0、1で始まります...基本的にはPDFリファレンス(詳細についてはコメントを参照):

% 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

すばらしいです!おかげで、冗談を言わないでください:)
MarkovCh1

2

仕事を行うことができる小さなPythonスクリプトがあります: ます https //github.com/lovasoa/pagelabels-py

あなたのケースでは:

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

1
これは素晴らしい解決策です!
mikemtnbikes

1

Openoffice / Libreofficeは、pdf-import拡張機能とページネーションマクロを使用してトリックを実行できます。

完璧な解決策ではありませんが、私にとってはうまくいきます(PDF Modの使用は別として-これを強くお勧めします)。


pdf-import拡張機能は、OpenOffice.org 3.2で破壊されたようです。(DrawとWriterに)インポートすると、「I / Oエラー」が発生します。
-MarkovCh1

0

PDFドキュメントを操作するPythonライブラリであるpyPdfを試してください。それほどではないが、いくつかのプログラミングが必要です。

PDFtkご覧になれますが、個々のページに関連付けられているページ番号の変更をサポートしているかどうかは確認していません。どちらもUbuntuのパッケージとして利用できます。


1
うーん、PDFtkはそれを行うことができないようです。pyPdfにはメタデータを抽出するための多くのメソッドがありますが、それらをドキュメントに書き戻すことができないようです。
-MarkovCh1

0

ソースフォージでホストされているPDFEditと呼ばれる別のアプリがあります。 Source Forgeプロジェクトページ -ただし、必要な機能がないため、これは役に立ちません

PDFEditでのテキスト編集


1
PDF Editがページ番号を変更することは実際にはないと思います。いずれにしても、私は試しましたが成功しませんでした。
-MarkovCh1

2
@Syzygy-確かにチェックしただけです。ドキュメントに含まれている場合はDict pdfeditを表示できCatalog/PageLabelsますが、選択されている場合は、「この辞書には直接編集可能なプロパティはありません」と表示されます。
sdaau
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.