Ich verwende Linux und hätte gerne eine Software (oder ein Skript, eine Methode), die einige PDFs zusammenführt und eine einheitliche Ausgabe-PDF mit Lesezeichen erstellt. Lesezeichen werden nach dem Dateinamen der PDF-Dateien benannt, die zum Zusammenführen verwendet wurden, und verweisen auf die Seitenzahl, auf der diese Dateien beginnen.
Ähnliche Möglichkeiten bietet Adobe Acrobat, allerdings ist es kostenpflichtig und nur für Windows verfügbar.
Antwort1
AKTUALISIEREN: Ich war mit dem Ergebnis nicht zufrieden und habe dies mit einer schönen GUI geschrieben:
https://github.com/Yanpas/PdfMerger
Habe Python gelernt und in einer Stunde ein (modifiziertes) Programm geschrieben:
#! /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()
Dieses Programm erfordert PyPDF2. Sie können es über installieren sudo pip install pypdf2
. Zuvor müssen Sie jedoch pip installieren :) Öffnen Sie einfach das Terminal und geben Sie ein./pdfmerger.py *.pdf
Antwort2
Dieses Bash-Skript sorgt dafür, dass jedes PDF in einem Verzeichnis auf seiner ersten Seite ein Lesezeichen mit dem Text des PDF-Dateinamens enthält, und verkettet dann alle. Es kann mit Dateinamen umgehen, die nicht im ASCII-Format vorliegen.
#!/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
Antwort3
Eine gute Antwort modifizieren [1] vontex.stackexchange.comkönnen Sie eine itemize
Liste mit Verweisen auf die Dateien erstellen, die Sie unten einfügen möchten. (Ähnlich einem Inhaltsverzeichnis). Latex kümmert sich um die Aktualisierung der Seitenzahlen.
MancheLatexWörter mehr
Eine Zeile wie diese enthält diePDFDatei
MyDoc1.pdf
mit dem Referenznamen"Dokument01"im selben Verzeichnis wie die Latex-Datei vorhanden:\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
Ein Befehl wie
\pageref{doc02.3}
erstellt einen Link mit der Nummer der dritten Seite des Dokuments, das als Referenz den Schlüssel hat"Dokument02". Latex sorgt dafür, dass es auf dem neuesten Stand bleibt.Ein Block
\begin{itemize}
\end{itemize}
erstellt eine Punkteliste.
Die Latex-Datei
Nachfolgend die geänderte Vorlage, die funktioniert mit 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}
Notiz
Um PDF-Dokumente oder Seiten einfach zusammenzuführen und aufzuteilen, können Sie Tools wie pdftk verwenden und sich von anderen Fragen inspirieren lassen [3] darüber.
Verweise