スキャンされたPDFの-メタデータを編集して、カスタムページ番号を異なるページに割り当てたい。たとえば、現在ページ1〜3にあるものをi、ii、iiiに呼び出したい場合、ページ4〜10にあるものを1〜7に呼び出したい場合があります。 notページの実際の順序を変更したい。
A)無料ツールを使用してこれを行う方法。およびB)これを「バッチ」で行う方法(したがって、各ページに手動で番号を付け直す必要はありません)。
これは、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で問題になることはありません。
より頻繁にこれが必要な場合は、ローマ数字のページの数とファイル名を引数として受け入れ、名前と数字が変数である上記のコードで一時ファイルを作成し、コンパイルされるスクリプトを書くことができます。
テキストエディターでそれを行うことができます。
答えが示すように、テキストエディターで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標準-ページラベル には詳細な仕様があります。
jPDF Tweak は、ページ番号付け(正しい用語は「ページラベル付け」)およびその他の多くの初心者から高度なPDF編集機能を提供するオープンソースのグラフィカルユーティリティです。 Ubuntuおよびその他のオペレーティングシステムで実行されます。
Documentation ページには、ステップごとの手順が記載されています。
PDF Modと呼ばれるツールがあります。これは、PDFのページを再配置する無料のツールです。
Ubuntu 10.10以降のUbuntu Software Centerからインストールできます。
Ubuntu 9.10または10.04にインストールするには:
インストールするにはソフトウェアソースにppa ppa:pdfmod-team/ppa
を追加し( これを行う方法 )、ソフトウェアセンターからpdfmodをインストールします。
適応元: http://www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html
幸運:D
このためにghostscript
を使用できる可能性があるポインターを見つけました。ここでは、 pdftk-pdfにブックマークを追加および編集します-UnixおよびLinux-Stack Exchange#186 ;リンクを参照します:
ただし、上記はブックマークを扱います-論理的なページネーションではありません。 pdfmarkReference.pdf から判明し、必要な「コマンド」は '/Label
'(または '/PAGELABEL
')です-さらに PDFReference。 pdf 8.3.1章「ページラベル」。残念ながら、その章では、pdfmarksをページラベルで使用する方法を必ずしも説明していませんが、この投稿では次のように説明しています。
/ 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
Openoffice/Libreofficeは、pdf-import拡張機能とページネーションマクロを使用してトリックを実行できます。
完璧な解決策ではありませんが、私にとってはうまくいきます(PDF Modを使用することは別として-これを強くお勧めします)。
ジョブを実行できる小さな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
ソースフォージでホストされているPDFEditと呼ばれる別のアプリがあります。 Source Forge Project Page -ただし、必要な機能がないため、これは役に立ちません