私は Linux を使用していますが、いくつかの PDF を結合して、ブックマークを含む統合された出力 PDF を作成するソフトウェア (またはスクリプト、メソッド) が必要です。ブックマークは、結合に使用され、これらのファイルが始まるページ番号を指す PDF ファイルのファイル名によって命名されます。
同様の可能性としては Adobe Acrobat がありますが、これは無料ではなく、Windows のみです。
答え1
アップデート: 結果に満足できなかったので、素敵な GUI を使ってこれを書きました:
https://github.com/Yanpas/PdfMerger
Python を学習し、1 時間でプログラムを作成 (修正) しました。
#! /usr/bin/env python
# Original author Nicholas Kim, modified by Yan Pashkovsky
# New license - GPL v3
import sys
import time
from PyPDF2 import utils, PdfFileReader, PdfFileWriter
def get_cmdline_arguments():
"""Retrieve command line arguments."""
from optparse import OptionParser
usage_string = "%prog [-o output_name] file1, file2 [, ...]"
parser = OptionParser(usage_string)
parser.add_option(
"-o", "--output",
dest="output_filename",
default=time.strftime("output_%Y%m%d_%H%M%S"),
help="specify output filename (exclude .pdf extension); default is current date/time stamp"
)
options, args = parser.parse_args()
if len(args) < 2:
parser.print_help()
sys.exit(1)
return options, args
def main():
options, filenames = get_cmdline_arguments()
output_pdf_name = options.output_filename + ".pdf"
files_to_merge = []
# get PDF files
for f in filenames:
try:
next_pdf_file = PdfFileReader(open(f, "rb"))
except(utils.PdfReadError):
print >>sys.stderr, "%s is not a valid PDF file." % f
sys.exit(1)
except(IOError):
print >>sys.stderr, "%s could not be found." % f
sys.exit(1)
else:
files_to_merge.append(next_pdf_file)
# merge page by page
output_pdf_stream = PdfFileWriter()
j=0
k=0
for f in files_to_merge:
for i in range(f.numPages):
output_pdf_stream.addPage(f.getPage(i))
if i==0:
output_pdf_stream.addBookmark(str(filenames[k]),j)
j = j + 1
k += 1
# create output pdf file
try:
output_pdf_file = open(output_pdf_name, "wb")
output_pdf_stream.write(output_pdf_file)
finally:
output_pdf_file.close()
print "%s successfully created." % output_pdf_name
if __name__ == "__main__":
main()
このプログラムにはPyPDF2が必要です。 からインストールできますがsudo pip install pypdf2
、その前にpipをインストールする必要があります:) ターミナルを開いて入力するだけです./pdfmerger.py *.pdf
答え2
この Bash スクリプトは、ディレクトリ内の各 PDF に、その最初のページに PDF ファイル名のテキストを含む 1 つのブックマークを含め、それらをすべて連結します。非 ASCII ファイル名を処理できます。
#!/usr/bin/bash
cattedPDFname="${1:?Concatenated PDF filename}"
# make each PDF contain a single bookmark to first page
tempPDF=`mktemp`
for i in *.pdf
do
bookmarkTitle=`basename "$i" .pdf`
bookmarkInfo="BookmarkBegin\nBookmarkTitle: $bookmarkTitle\nBookmarkLevel: 1\nBookmarkPageNumber: 1"
pdftk "$i" update_info_utf8 <(echo -en $bookmarkInfo) output $tempPDF verbose
mv $tempPDF "$i"
done
# concatenate the PDFs
pdftk *.pdf cat output "$cattedPDFname" verbose
答え3
良い回答を修正する[1]の翻訳元itemize
、以下に含めるファイルへの参照を含むリストを作成できます。(toc と同様) Latex はページ番号を自動的に更新します。
いくつかのラテックス単語数を増やす
このような行には、PDF
MyDoc1.pdf
参照名を持つファイル「ドキュメント01」LaTeX ファイルと同じディレクトリに存在します:\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
コマンドは、
\pageref{doc02.3}
参照キーを持つ文書の3ページ目の番号へのリンクを作成します。「ドキュメント02」Latex は最新の状態を維持するよう努めます。ブロックは
\begin{itemize}
\end{itemize}
ポイントリストを作成します。
ラテックスファイル
以下は、次の場合に機能する変更されたテンプレートですpdflatex
。
\documentclass{article}
\usepackage{hyperref}
\usepackage{pdfpages}
\usepackage[russian,english]{babel}
\newcounter{includepdfpage}
\newcounter{currentpagecounter}
\newcommand{\addlabelstoallincludedpages}[1]{
\refstepcounter{includepdfpage}
\stepcounter{currentpagecounter}
\label{#1.\thecurrentpagecounter}}
\newcommand{\modifiedincludepdf}[3]{
\setcounter{currentpagecounter}{0}
\includepdf[pages=#1,pagecommand=\addlabelstoallincludedpages{#2}]{#3}}
\begin{document}
You can refer to the beginning or to a specific page: \\
see page \pageref{doc01.1} till \pageref{doc02.3}.\\
\begin{itemize}
\item Here contribution from Grupmate 1 \pageref{doc01.1}
\item Here contribution from Grupmate 2 \pageref{doc02.1}
\end{itemize}
\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
\modifiedincludepdf{-}{doc02}{MyDoc2.pdf}
\end{document}
注記
PDF文書やページを簡単に結合したり分割したりするには、pdftkなどのツールを使用したり、他の質問からヒントを得たりすることができます[3]それについて。
参考文献