Wie kann man pdfs zusammenführen und Lesezeichen für jede Eingabedatei in der Ausgabedatei erstellen? (Linux)

2370
yanpas

Ich verwende Linux und hätte gerne eine Software (oder ein Skript, eine Methode), die einige PDF-Dateien zusammenführt und eine einheitliche Ausgabe-PDF mit Lesezeichen erstellt. Lesezeichen werden nach Dateinamen von PDF-Dateien benannt, die zum Zusammenführen und Verweisen auf die Seitennummer verwendet wurden, an der diese Dateien beginnen.

Ähnliche Möglichkeiten bietet Adobe Acrobat, es ist jedoch nicht frei und nur für Windows.

1
In okular können Sie in jedem Teil eines PDFs Lesezeichen setzen, die in einer Spalte mit Lesezeichen angezeigt werden, unabhängig davon, ob die Datei geöffnet ist oder nicht. Dann klicken Sie und ... Es ist nicht das, wonach Sie suchen, aber es könnte funktionieren. Um mehr PDFs in nur einem einzubinden, können Sie Latex verwenden ... Übrigens wird Ihre Frage wahrscheinlich geschlossen sein, da die Software-Vorschläge nicht zum Thema gehören. Es sollte anders sein, wenn Sie versuchen, ein Skript zu erstellen, das alle PDF-Dateien mit ihrem Speicherort findet, `basename` und` dirname 'aufteilen und alle in einen tex-Container stellen, der kompiliert werden soll, damit Ihre Datei gespeichert wird und Sie irgendwo stehen bleiben . ;) Hastur vor 8 Jahren 0
Schauen Sie sich http://unix.stackexchange.com/q/17065/121614 an NZD vor 8 Jahren 0
@Hastur gut gs script wäre OK für diesen Zweck) Ich habe keine Quelldateien, nur pdfs, also verstehe ich nicht, wie Latex helfen kann yanpas vor 8 Jahren 0
@yanpas: Ich habe es nicht gut verstanden: Wollen Sie, sagen wir, ein Buch mit einer Reihe von PDF-Dateien und mit einem Index am Anfang (oder am Ende) mit _Hyperlinks_ zu der Seite erstellen, von der aus die jeweils erstellt wird? Artikel beginnt im Buch oder möchten Sie einen Index mit einem Link erstellen, der auf die Datei auf der Festplatte verweist? Ich denke der 1.. Kannst du es bestätigen? Hastur vor 8 Jahren 0
@Hastur die Antwort ist näher an der ersten. Ich und meine Kollegen bereiten ungefähr 100 Fragen für die Prüfung vor, jeder von uns trägt seine eigene Rolle im Editor bei, den er bevorzugt, und schickt mir sein Ergebnis im PDF-Format. Dann füge ich alle pdfs zu output.pdf zusammen. Um die Navigation zu vereinfachen, möchte ich, dass outer.pdf eine Lesezeichenliste hat (wenn ich auf diese Liste klicke - ich werde in den Abschnitt des Dokuments verschoben, der mit den vielen Antworten zusammenhängt. Etwas wie http://i.imgur.com /hQQwp6i.png yanpas vor 8 Jahren 0
@yanpas Fühlen Sie sich frei, die Pakete hinzuzufügen, die Sie benötigen, und ändern Sie sie für Ihre Zwecke :) Ich habe getestet, dass es auf meinem System funktioniert. Gib mir Bescheid. Hastur vor 8 Jahren 0
Warum verwenden nicht alle das gleiche Dateiformat, das sich besser zum Bearbeiten, Ausschneiden und Einfügen eignet? Wie ODF (Libreoffice), Word usw.? Oder wenn jede Person sich nicht die Mühe machen sollte, * dasselbe * Programm zu verwenden, dann * Sie * jede Datei in ihrem eigenen Format öffnen und dann in Ihr Lieblingsformat schneiden und einfügen? Xen2050 vor 8 Jahren 0
@ Xen2050 Ich habe nur einen Fall beschrieben, manchmal habe ich nichts außer pdfs aus dem Internet und ich brauche immer noch Strcuture im endgültigen pdf yanpas vor 8 Jahren 0

2 Antworten auf die Frage

2
Hastur

Wenn Sie eine gute Antwort [ 1 ] von tex.stackexchange.com ändern, können Sie eine itemizeListe mit dem Verweis auf die Dateien erstellen, die Sie unten einfügen werden. (Ähnlich einem toc). Latex achtet darauf, die Seitenzahlen zu aktualisieren.

Einige Latexwörter mehr

  • Eine Zeile wie diese enthält die PDF- Datei MyDoc1.pdfmit dem Referenznamen "doc01" im selben Verzeichnis der Latex-Datei:

    \modifiedincludepdf{-} 
  • Ein Befehl \pagereferstellt einen Link mit der Nummer der dritten Seite des Dokuments, auf die der Schlüssel "doc02" verweist . Latex sorgt dafür, dass es aktualisiert wird.

  • Ein Block \begin \enderstellt eine Liste mit Spitzen.

Die Latexdatei
Hier unten die geänderte Vorlage, mit der gearbeitet werden kann pdflatex:

\documentclass \usepackage \usepackage \usepackage[russian,english]  \newcounter \newcounter \newcommand{\addlabelstoallincludedpages}[1]{ \refstepcounter \stepcounter \label{#1.\thecurrentpagecounter}} \newcommand{\modifiedincludepdf}[3]{ \setcounter \includepdf[pages=#1,pagecommand=\addlabelstoallincludedpages{#2}]{#3}}  \begin  You can refer to the beginning or to a specific page: \\ see page \pageref till \pageref.\\  \begin \item Here contribution from Grupmate 1 \pageref \item Here contribution from Grupmate 2 \pageref \end  \modifiedincludepdf{-} \modifiedincludepdf{-}  \end 

Hinweis

Um PDF-Dokumente oder Seiten einfach zusammenzuführen und zu trennen, können Sie Werkzeuge als pdftk verwenden und sich von anderen Fragen [ 3 ] dazu inspirieren lassen.

Verweise

2
yanpas

UPDATE : Ich war mit dem Ergebnis nicht zufrieden und habe dies mit einer schönen GUI geschrieben:

https://github.com/Yanpas/PdfMerger


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, davor müssen Sie pip installieren :) Öffnen Sie einfach das Terminal und geben Sie es ein./pdfmerger.py *.pdf