Postscriptに大きなドキュメント(500ページ以上)があり、ページ番号を追加したい場合、誰かがこれを行う方法を知っていますか?
15 に答える
rcsの提案したソリューションに基づいて、私は次のことを行いました。
ドキュメントをに変換してexample.pdf
実行しましたpdflatex addpages
。ここで、次のようになりaddpages.tex
ます。
\documentclass[8pt]{article}
\usepackage[final]{pdfpages}
\usepackage{fancyhdr}
\topmargin 70pt
\oddsidemargin 70pt
\pagestyle{fancy}
\rfoot{\Large\thepage}
\cfoot{}
\renewcommand {\headrulewidth}{0pt}
\renewcommand {\footrulewidth}{0pt}
\begin{document}
\includepdfset{pagecommand=\thispagestyle{fancy}}
\includepdf[fitpaper=true,scale=0.98,pages=-]{example.pdf}
% fitpaper & scale aren't always necessary - depends on the paper being submitted.
\end{document}
または、両面ページの場合(つまり、ページ番号が一貫して外側にある場合):
\documentclass[8pt]{book}
\usepackage[final]{pdfpages}
\usepackage{fancyhdr}
\topmargin 70pt
\oddsidemargin 150pt
\evensidemargin -40pt
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\fancyfoot[LE,RO]{\Large\thepage}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\begin{document}
\includepdfset{pages=-,pagecommand=\thispagestyle{fancy}}
\includepdf{target.pdf}
\end{document}
ヘッダーマージンを変更する簡単な方法:
% set margins for headers, won't shrink included pdfs
% you can remove the topmargin/oddsidemargin/evensidemargin lines
\usepackage[margin=1in,includehead,includefoot]{geometry}
簡単に使用できます
pspdftool
この上:
pspdftool 'number(x=-1pt,y=-1pt,start=1,size=10)' input.pdf output.pdf
これらの2つの例を参照してください(pspdftoolを使用した番号なしおよび番号付きpdf)
番号のないpdf
番号付きpdf
これを最初のコマンドライン引数として:
number(start=1, size=40, x=297.5 pt, y=10 pt)
受け入れられた回答のように、ラテックスを使用してPDFにページ番号を追加していました。
今、私はより簡単な方法を見つけました:enscript
ページ番号を含むヘッダーを持つ空のページを作成するために使用し、ファイルにヘッダーを配置するオプションを使用pdftk
します。multistamp
この bash スクリプトは、唯一のパラメーターとして pdf ファイルを想定しています。
#!/bin/bash
input="$1"
output="${1%.pdf}-header.pdf"
pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2)
enscript -L1 --header='||Page $% of $=' --output - < <(for i in $(seq "$pagenum"); do echo; done) | ps2pdf - | pdftk "$input" multistamp - output $output
これは解決策かもしれません:
- を使用して Postscript を pdf に変換する
ps2pdf
- LaTeX ファイルを作成し、pdfpagesパッケージを使用してページを挿入します (
\includepdf
) - の引数でfancyhdrパッケージ
pagecommand={\thispagestyle{plain}}
のまたは何かを使用します\includepdf
- PostScript 出力が必要な場合は、pdflatex 出力を PostScript に変換します。
pdf2ps
Captaincomic のソリューションに加えて、任意のページでページ番号の開始をサポートするように拡張しました。
enscript、pdftk 1.43 以上、および pdfjam (pdfjoin ユーティリティ用) が必要です。
#!/bin/bash
input="$1"
count=$2
blank=$((count - 1))
output="${1%.pdf}-header.pdf"
pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2)
(for i in $(seq "$blank"); do echo; done) | enscript -L1 -B --output - | ps2pdf - > /tmp/pa$$.pdf
(for i in $(seq "$pagenum"); do echo; done) | enscript -a ${count}- -L1 -F Helvetica@10 --header='||Page $% of $=' --output - | ps2pdf - > /tmp/pb$$.pdf
pdfjoin --paper letter --outfile /tmp/join$$.pdf /tmp/pa$$.pdf /tmp/pb$$.pdf &>/dev/null
cat /tmp/join$$.pdf | pdftk "$input" multistamp - output "$output"
rm /tmp/pa$$.pdf
rm /tmp/pb$$.pdf
rm /tmp/join$$.pdf
たとえば、これを /usr/local/bin/pagestamp.sh に配置して、次のように実行します。
pagestamp.sh doc.pdf 3
これにより、ページ番号が 3 ページから始まります。カバーシート、タイトル ページ、目次などがある場合に便利です。
残念なことに、enscript の --footer オプションが壊れているため、この方法を使用して下部のページ番号を取得することはできません。
私はpspdftool ( man ページ)を使用するというアイデアが気に入りましたが、私が求めていたのは、y形式のページ x と、ページの残りの部分に一致するフォント スタイルでした。
ドキュメントで使用されているフォント名を調べるには:
$ strings input.pdf | grep Font
ページ数を取得するには:
$ pdfinfo input.pdf | grep "Pages:" | tr -s ' ' | cut -d" " -f2
pspdftool
いくつかのコマンドで接着します。
$ in=input.pdf; \
out=output.pdf; \
indent=30; \
pageNumberIndent=49; \
pageCountIndent=56; \
font=LiberationSerif-Italic; \
fontSize=9; \
bottomMargin=40; \
pageCount=`pdfinfo $in | grep "Pages:" | tr -s ' ' | cut -d" " -f2`; \
pspdftool "number(x=$pageNumberIndent pt, y=$bottomMargin pt, start=1, size=$fontSize, font=\"$font\")" $in tmp.pdf; \
pspdftool "text(x=$indent pt, y=$bottomMargin pt, size=$fontSize, font=\"$font\", text=\"page \")" tmp.pdf tmp.pdf; \
pspdftool "text(x=$pageCountIndent pt, y=$bottomMargin pt, size=$fontSize, font=\"$font\", text=\"out of $pageCount\")" tmp.pdf $out; \
rm tmp.pdf;
結果は次のとおりです。
PostScript を使ってからずいぶん経ちましたが、ブルー ブックをざっと見てみればわかります :) www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF
一方、Adobe Acrobat と少しの JavaScript も驚異的な効果を発揮します ;)
または、これを見つけました:http://www.ghostscript.com/pipermail/gs-devel/2005-May/006956.html、これは法案に合っているようです(私は試しませんでした)
PSベースのソリューションをお探しだと思います。PSには、これを可能にするページレベルの演算子はありません。PageSetup
各ページのセクションにフッターを追加する必要があります。どんなスクリプト言語でもあなたを助けることができるはずです。
で作成されたスタイル スライドでshell
これを解決するために、次のスクリプトを作成しました(スライドを最終的なプレゼンテーションにまとめてから、以下のスクリプトを使用してスライド番号を追加します)。LaTeX
beamer
inkscape
pdftk cat
PDF
#!/bin/sh
# create working directory
tmpdir=$(mktemp --directory)
# read un-numbered beamer slides PDF from STDIN & create temporary copy
cat > $tmpdir/input.pdf
# get total number of pages
pagenum=$(pdftk $tmpdir/input.pdf dump_data | awk '/NumberOfPages/{print $NF}')
# generate latex beamer document with the desired number of empty but numbered slides
printf '%s' '
\documentclass{beamer}
\usenavigationsymbolstemplate{}
\setbeamertemplate{footline}[frame number]
\usepackage{forloop}
\begin{document}
\newcounter{thepage}
\forloop{thepage}{0}{\value{thepage} < '$pagenum'}{
\begin{frame}
\end{frame}
}
\end{document}
' > $tmpdir/numbers.tex
# compile latex file into PDF (2nd run needed for total number of pages) & redirect output to STDERR
pdflatex -output-directory=$tmpdir numbers.tex >&2 && pdflatex -output-directory=$tmpdir numbers.tex >&2
# add empty numbered PDF slides as background to (transparent background) input slides (page by
# page) & write results to STDOUT
pdftk $tmpdir/input.pdf multibackground $tmpdir/numbers.pdf output -
# remove temporary working directory with all intermediate files
rm -r $tmpdir >&2
このスクリプトSTDIN
は、STDOUT
印刷診断pdflatex
出力を に読み書きしSTDERR
ます。
したがって、上記のコードをテキスト ファイルにコピー アンド ペーストし、たとえばenumerate_slides.sh
、実行可能 ( chmod +x enumerate_slides.sh
) にして、次のように呼び出します。
./enumerate_slides.sh < input.pdf > output.pdf [2>/dev/null]
適切な用紙サイズとスタイル オプションLaTeX
を使用するようにテンプレートを調整することで、これを他の種類のドキュメントに簡単に調整できるはずです。documentclass
編集:シンボリックリンクで、デフォルトでエスケープシーケンスを解釈するシェル内部でコマンドをオーバーライドするシンボリックリンクに
置き換えecho
、この動作をオーバーライドするオプションを提供しません。別の方法として、LaTeX テンプレートのすべてを としてエスケープすることもできます。$(which echo)
ubuntu
/bin/sh
dash
echo
-E
\
\\
編集:の代わりに, を返すので、
に置き換えまし$(which echo)
た。最終的に使用することにした理由の詳細については、この質問を参照。printf '%s'
zsh
which echo
echo: shell built-in command
/bin/echo
printf
これには pstops ( psutils の一部)を使用できますか?
これにはLibreOffice Calcを使用しました。Insert->Field->Page Numberを使用すると、ページ番号フィールドを簡単に追加できます。そして、このフィールドをコピーして他のページに貼り付けることができます。幸いなことに、位置は変更されておらず、下矢印キーとCtrl+Vを使用してコピー アンド ペーストをすばやく実行できます。30ページの記事で私のために働いた. 500 以上のエラーが発生しやすい可能性があります。