PDFのメタデータの内部ページ番号を変更するにはどうすればよいですか?


37

私はアクロバット以外の方法で作成したpdfドキュメントを持っています(pdfに印刷してからpdfの束をマージします)が、手動でページ番号を変更したい(つまり、最初のいくつかのページは単にタイトルページ、「ページ1」というラベル付いているのは、実際にはPDFの7枚目です)。これを行う最も簡単な(理想的には無料の)方法は何ですか?

明確にするために、私はページ自体の番号を変更しようとはしていませんが、pdfが保存する「メタデータ」のページ番号を変更しようとしています(ページ自体にはすでに正しい番号が付けられています。1 というラベルのページに移動します。これはシート7の場合があります)。

価値があるのは、Windowsを使用していることですが、Macにもアクセスできます。


あなたの説明と要件を完全に理解しているかどうかはわかりません。変更するサンプルPDFへのリンクを提供できますか?
カートフェイフル

たとえば、実際にtxtファイルを開かずに大きなpdfファイルでそれを行うためのコマンドラインツールはありますか?
jj_p

例えばpdftkのような?
jj_p

回答:


39

実際に必要なものはページラベルと呼ばれ、PDFのソースコードに簡単に直接追加できます。ファイル拡張子をからpdfに変更txtし、テキストエディターでファイルを開きます(ファイルサイズによっては時間がかかることがありますが、しばらくお待ちください)。ページラベルに関する情報は、次のようなドキュメントカタログと呼ばれるノードに保存されます。

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
>>
endobj

より混乱するものが含まれている場合がありますが、これは基本的な構造です。カタログは1つしかないため、大きなファイルでは、を含むノードを検索できます/Catalog。これで、/PageLabelsエントリを挿入して、必要な変更を行うことができます。

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
   /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
                        ]
               >>
>>
endobj

ページインデックスと呼ばれる数字で始まる3行があります。ページ1にはインデックス0、ページ2にはインデックス1などがあります。常に範囲を記述するため、の行1 <<...>>はインデックス1から5の6 <<...>>すべてのページに適用され、の行は6から最後のページまでのすべてのページに適用されます。のラベル0 <<...>>は常に定義する必要があります。

ページラベルとPDFソースコードの詳細については、PDF標準またはPDF標準wikiを参照してください。


4
素晴らしい!これは私がそのような直接的で有用な情報を見つけたウェブ上の唯一の場所です。結局のところ、Acrobat Readerを持っているわけではありません。
ノルドリン

3
/St 8または/St 2を使用して、表示されたラベルの開始点を設定します。しかし、8(または2)の代わりに任意の番号を選択します。これは1以上でなければなりません。たとえば1 << /S /r /St 12 >>、(実際には)2-6から(表示される)xii-xviiとしてページに番号を付けます。
n611x007

1
答えてくれてありがとう、しかし私の経験では、この方法は時々機能し、時には機能しない。また、たまたま複数のカタログを見つけました。どのように説明しますか?
jj_p

1
素晴らしい情報。別の便利なソースへのリンクを次に示します。W3CからのPDFドキュメントの一貫したページ番号の指定
アダムマックラー

2
このように動作しますか?一部のPDFファイルの生の内容を見てから、カタログ後のファイル内の位置にポイントが更新されなければならないことを、いくつかのインデックス番号のように思えた、先行するコンテンツの長さが変化...もし
ORマッパー

6

私があなたを正しく理解している場合、それがどのように機能するか次のとおりです。

gs \
  -o modified-pagelabels-50pages.pdf \
  -sDEVICE=pdfwrite \
  -c "[ /Page 1 /Label (i)     /PAGELABEL pdfmark" \
  -c "[ /Page 2 /Label (ii)    /PAGELABEL pdfmark" \
  -c "[ /Page 3 /Label (III)   /PAGELABEL pdfmark" \
  -c "[ /Page 4 /Label (four)  /PAGELABEL pdfmark" \
  -c "[ /Page 5 /Label (v)     /PAGELABEL pdfmark" \
  -c "[ /Page 6 /Label (|||||) /PAGELABEL pdfmark" \
  -f 50pages.pdf

ただし、前回(約2年前)に試したときに、これが確実にまたは完全に機能しなかったことを覚えているようです

更新:私の記憶は私に失敗していませんでした。私は今、もう一度試して、これに関するGhostscriptのバグレポートbug 691889を提出しました。詳細を確認するには、バグレポートへのリンクに従ってください。


5

注1:受け入れられた答えはまだほとんど正しいですが、いくつかのギャップがあります。多くのPDFファイルはテキストとして直接編集できないため、欠けています。たとえそうであったとしても、そのような編集はPDFを損傷して読みにくくすることがあります。UnixとMicrosoft Windowsの両方のために働く一つの解決策は、あるqpdf「QDF」、まだ有効なPDFファイルでテキスト編集可能な形式にPDFファイルを変換することができます。qpdfパッケージが付属していますfix-qdfQDFファイルの後に再計算オフセットが損害を修正するために編集されていること。

注2:テキストエディタで不快ですか?最初にjpdftweakなどのGUIエディターを使用してみてください。GUI pdfエディターが機能することもありますが、その場合は完了です。しかし、私にとってよくあることですが、失敗した場合は、このより堅牢な代替手段を試すことができます。いずれにせよ、エレガントではないという私の答えに反対投票しないでください。


Qpdfを使用してPDFページ番号を編集する方法

概要:

  1. qpdf -qdf foo.pdf foo.qdf
  2. foo.qdfを編集

     0 << >>           % No label on first pages
     6 << /S /D >>     % Start numbering from 7th page.
    
  3. fix-qdf foo.qdf >bar.qdf
  4. テストbar.qdf
  5. qpdf bar.qdf bar.pdf

詳細な手順

ステップ1。

文書を簡単に編集可能なQDF形式に変換します。次のようにコマンドラインからqpdfを実行します。

qpdf -qdf foo.pdf foo.qdf

注:qpdfがまだインストールされていない場合、Microsoft Windows実行可能ファイルはhttps://github.com/qpdf/qpdf/releasesからダウンロードできます。Ubuntu やDebian GNU / LinuxなどのUnixシステムは、を入力してインストールできますapt install qpdf

ステップ2。

notepad ++、emacs、geditなどのテキストエディターを使用してQDFドキュメントを編集します。単語/Catalogを検索し、その中にある<<山括弧>>に注意してください。近くに、現在の/PageLabels(ある場合)が表示されます。

異なる番号を付ける必要がある各セクションをに追加します/PageLabels。形式はstart-page<< style>>です。空白は重要ではなく、ドキュメントの最初のページは0です。特に指定がない限り、新しいセクションは常に1からページ番号を付け始めます。

以下に、PageLabelsがどのように見えるかを示す完全な例をコメント付きで示します。

/Type /Catalog
/PageLabels <<
  /Nums [
    0           % From the first page of the document,
      <<
        /S /r   % ...use the lowercase roman numeral style.
      >>
    6           % From seventh page onward,
      <<
        /S /D   % ...use ordinary digits (arabic numerals)
      >>
  ]
>>

ファイルにPageLabelsがない場合は、後に追加します/Type /Catalog。たとえば、変更する場合があります。

1 0 obj
<<
  …
  /Type /Catalog
>>
endobj

に、

1 0 obj
<<
  … 
  /Type /Catalog
  /PageLabels
      << /Nums [
    0 << >>                 % No label for cover
    1 << /S /r >>           % i, ii for index
    3 << /S /D /St 15 >>    % 15, 16, 17, ... for article
    31 << /S /D /P (A-) >>  % A-1, A-2, A-3... for appendix
       ]
  >>
>>
endobj

オプション:異なる番号から開始する /St

特に指定しない限り、各セクションの番号は1から再開されます/St。上記の例で、4ページ目が15から始まることに注意してください。

オプション:異なるスタイルを使用する /S

/S演算子を使用すると、番号付けスタイルを選ぶことができます引数を取り、

  • / D桁(1、2、3 ...)
  • / R大文字のローマ字(I、II、III ...)
  • / rローマ字小文字(i、ii、iii ...)
  • / Aアルファベットの大文字(A、B、C、....、X、Y、Z、AA、AB、AC、...)
  • / aアルファベットの小文字(a、b、c、....、x、y、z、aa、ab、ac、...)

/S演算子を省略すると、ページのそのセクションには番号が付けられません。例えば:

0 << >>         % No label for cover

オプション:各ページに接頭辞を追加する /P

後に括弧で単語を指定することにより、ページ番号の前に任意のテキスト文字列を表示できます/P

  31
  <<
    /S /D
    /P (A-)     % label appendix pages A-1, A-2, A-3
  >>

スタイルなしのプレフィックス(/S)を指定すると、数字のない単語のみのページが表示されます。これは、たとえば、表紙に単に「カバー」というラベルを付けたい場合に便利です。

     0 << /P (Cover) >>        % No number, just "Cover"

ステップ3。

実行fix-qdfして編集を有効なPDFにし、出力をbar.qdfに入れます。

fix-qdf foo.qdf > bar.qdf

ステップ4。

PDF表示プログラムでbar.qdfを開き、正しい番号が付けられていることを確認します。

ステップ5。

次のように、QDFファイルを変換して通常のPDFに戻します。

qpdf bar.qdf bar.pdf

タダ。できました。これで、bar.pdfにページ番号が正しくラベル付けされたドキュメントができました。


4

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

あなたの場合、次のようなものを呼び出します:

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

これは私が必要としていた通りに仕事をしました。ありがとう!
テロトリウム

3

jPdf Tweakは、PDFファイルのページラベルを編集できるオープンソースのグラフィカルユーティリティです。ドキュメントのページには、ステップバイステップの手順を説明します。


これを使用して、カスタムページラベルを「空の」形式として、テキストをプレフィックスとして追加しました。うまくいきました!
マットセフトン

これは、手で物事を編集するテキストよりずっといい答えである
endolith

外部リンクに頼るのではなく、ステップバイステップの手順をここに追加してください。ありがとう!
hackerb9

1

古いものを削除するには、おそらく最も簡単なクロスプラットフォームの方法は、古いものを切り取ることです。これには、たとえばBRISSを使用できます。

無料のツールを使用して新しいものを追加することは、より注意が必要です。個人的には、このStackExchange answerのように、おそらくpdflatexを使用しますが、pdflatexの他の用途がない限り、それはかなり複雑なソリューションかもしれません。

ただし、代わりにjPdfTweakを使用すればできると思います。


1

Dane H.が提供するメソッドは、Acrobat Reader(または正確にはAdobe Readerの最新バージョン)で動作します。注意すべき重要な点が1つあります。上部のフィールドには8文字しか入力できないため、そのようなラベルが使用されている場合は「サブジェクトインデックス」などを入力できません。ただし、代わりにメニュー項目[表示]> [ページナビゲーション]> [移動...]または同等のキーを使用できます。

もう1つのヒント:pdf仕様では常にページ番号が連続して割り当てられるため、ページのペアをスキャンして作成されたドキュメントの場合、2つの番号セットはずれます(面倒な各ページの個別番号付けをしない限り)。ただし、ドキュメントをほとんど手間をかけることなく設定できるため、「ページnに移動してページ2nおよび2n + 1に移動する」という規則が適用されます。


1

デンマーク人の答えは最高です、フォーマットは今少し変更されました、これは役に立つかもしれません:

%PDF-1.6

29241 0 obj

<</Metadata 1685 0 R/Outlines 29461 0 R/PageLabels<</Nums[0<</S/D>>3<</S/D/St 6>>4<</S/D/St 10>>5<</S/D/St 12>>15<</S/D/St 70>>16<</S/D/St 72>>17<</S/D/St 80>>18<</S/D/St 82>>19<</S/D/St 90>>23<</S/D/St 96>>25<</S/D/St 99>>29<</S/D/St 110>>31<</S/D/St 130>>32<</S/D/St 133>>35<</S/D/St 137>>36<</S/D/St 140>>37<</S/D/St 145>>39<</S/D/St 150>>40<</S/D/St 152>>42<</S/D/St 155>>43<</S/D/St 160>>46<</S/D/St 165>>47<</S/D/St 167>>48<</S/D/St 170>>49<</S/D/St 180>>50<</S/D/St 190>>52<</S/D/St 300>>53<</S/D/St 305>>54<</S/D/St 319>>56<</S/D/St 380>>57<</S/D/St 390>>58<</S/D/St 500>>67<</S/D/St 515>>68<</S/D/St 525>>70<</S/D/St 550>>71<</S/D/St 553>>72<</S/D/St 560>>73<</S/D/St 600>>76<</S/D/St 620>>78<</S/D/St 650>>82<</S/D/St 670>>85<</S/D/St 700>>95<</S/D/St 714>>117<</S/D/St 900>>162<</S/D/St 1000>>178<</S/D/St 1200>>209<</S/D/St 1500>>263<</S/D/St 1555>>270<</S/D/St 1563>>389<</S/D/St 1681>>522<</S/D/St 1813>>]>> /PageMode/UseOutlines/Pages 29177 0 R/Type/Catalog>>

endobj

1

「/ outlines」領域に「/ titles」がすでに設定されている場合、ファイルの直接編集(pdftkによる非圧縮)が機能しないことがわかりました。上記の投稿で説明されている直接編集のテクニックは、YouTubeで実証されていますhttps : //www.youtube.com/watch?v=zoH1Z_hSpak

ただし、pdftkの「更新」機能は、https:/で使用される「doc_data.txt」ファイルを編集することにより、より直感的です(PDFファイルの「/ outlines」領域に「/ titles」がすでに存在する場合は、より信頼性が高くなります) /www.pdflabs.com/blog/export-and-import-pdf-bookmarks/


1
こんにちは、@ Bob、リンクのみの回答は低品質です。ターゲットサイトが移動または表示されない場合、それらは役に立ちません。回答を編集して、ソリューションの関連部分をここに引用してください。
C0deDaedalus

0

BeCyPDFMetaEdit http://www.becyhome.de/becypdfmetaedit/description_eng.htm

このフリーウェアツールの[ページ]タブで、内部ページ番号スキームを追加/削除/変更できます。

また、注意してください、PDF xchangeビューアはページ番号スキームを表示せず、foxitreaderは正しい結果をもたらします。Acrobat Readerをテストしていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.